1

ここに私のSELECTクエリがあります:

SELECT
    a.id_auto,
    SUM(pozicane_dni * a.poplatok_denny + najazdene_km * a.poplatok_km) celkova_trzba
FROM Auta a
INNER JOIN (SELECT
            id_auto,
            (SUM(koniec_pozicania - zaciatok_pozicania)) pozicane_dni, 
            (SUM(najazdene_km)) najazdene_km,
            zaloha 
            FROM Zakaznik GROUP BY id_auto) z
ON z.id_auto = a.id_auto 
INNER JOIN (SELECT
            id_auto,
            poplatok_denny,
            poplatok_km 
            FROM Auta_zaloha) az
ON az.id_auto = a.id_auto 
GROUP BY a.id_auto;

しかし、私はこのエラーが発生しています:

ORA-00979: not a GROUP BY expression

どこに問題があるのか​​ 知っている人はいますか?私は少し混乱しています。集計関数 SUM() を使用するすべての場所で GROUP BY 句を使用しています。

編集:

もう 1 つ、クエリに CASE WHEN を追加すると動作しなくなります。

SELECT
    a.id_auto, a.poplatok_denny, a.poplatok_km,  
    CASE WHEN z.zaloha IS NULL THEN
        (pozicane_dni * a.poplatok_denny + najazdene_km * a.poplatok_km)
    ELSE 
        (pozicane_dni * az.poplatok_denny + najazdene_km * az.poplatok_km)
    END
        celkova_trzba
FROM Auta a
INNER JOIN (SELECT
            id_auto,
            (SUM(koniec_pozicania - zaciatok_pozicania)) pozicane_dni, 
            (SUM(najazdene_km)) najazdene_km,
            zaloha 
            FROM Zakaznik GROUP BY id_auto, zaloha) z
ON z.id_auto = a.id_auto 
INNER JOIN (SELECT
            id_auto,
            poplatok_denny,
            poplatok_km 
            FROM Auta_zaloha) az 
ON az.id_auto = a.id_auto 
GROUP BY a.id_auto;
4

4 に答える 4

4

最初の内部 SELECT では、「zaloha」を削除するか、GROUP BY するか、集計関数を適用する必要があります。

于 2009-10-29T11:37:47.600 に答える
0

2 番目の内部選択:

INNER JOIN (SELECT
        id_auto,
        poplatok_denny,
        poplatok_km 
        FROM Auta_zaloha) az

次のような group by 句が欠落しているようです。

INNER JOIN (SELECT
        id_auto,
        poplatok_denny,
        poplatok_km 
        FROM Auta_zaloha group by id_auto) az
于 2009-10-29T11:42:42.147 に答える
0

問題は、の値を使用することにあります

a.poplatok_km

a.id_auto でグループ化する場合、結果セットに複数の行がある場合にどうするかについてのルールを与える必要があります (可能な行が 1 つしかない場合でも、それは SQL が "認識" していないものです)。 )。

これを回避する 2 つの方法:

  • group by 句の計算に必要なテーブル a のすべての列を追加します
  • 何も変更しない min (a.poplatok_km) のような「疑似関数」を使用します
于 2009-10-29T11:39:30.717 に答える
0

CASE WHEN の代わりに NVL2 関数を使用してみてください。少なくとも、よりわかりやすいエラー メッセージが表示される可能性があります。

    NVL2(z.zaloha,
(pozicane_dni * az.poplatok_denny + najazdene_km * az.poplatok_km),
(pozicane_dni * a.poplatok_denny + najazdene_km * a.poplatok_km)
) celkova_trzba
于 2009-10-29T12:25:14.143 に答える