这是我的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
有谁知道问题出在哪里?我有点困惑。我在任何地方都有GROUP BY子句,我使用聚合函数SUM()。
编辑:
还有一件事,当我向查询添加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;
答案 0 :(得分:4)
在你的第一个内部SELECT中,你应该删除“zaloha”,GROUP BY它或者应用一些聚合函数。
答案 1 :(得分:0)
问题在于使用
的值a.poplatok_km
如果您按a.id_auto进行分组,则需要给出一个规则,说明如果结果集中有多行,该怎么办(即使只有一个可能的行,这是SQL不能“知道”)。
解决这个问题的两种方法:
答案 2 :(得分:0)
你的第二个内在选择:
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
答案 3 :(得分:0)
尝试使用NVL2功能代替CASE WHEN,至少可以产生更易理解的错误信息:
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