我正在尝试编写一个包含子查询的查询,该子查询包含聚合函数。我收到一条错误消息,告诉我应该在主查询的GROUP BY子句中包含一些字段,在其中我不使用任何聚合。 我在SQL领域还很新,所以这可能是一个愚蠢的错误,但是我已经花了好几天了,但是我无法用现有内容弄清楚它。
WITH B AS
(
SELECT
A.Week
,A.ASIN
,A.GL
,sum(Case when Week = 'W1' then Total_GV_Price/Total_GVs else 0 end) as Wk1_AVG
,sum(Case when Week = 'W2' then Total_GV_Price/Total_GVs else 0 end) as Wk2_AVG
FROM A
WHERE Total_GVs > 0
GROUP BY A.Week, A.ASIN, A.GL
)
, C AS
(
SELECT
B.Week
,B.ASIN
,B.GL
,B.Wk1_AVG
,B.Wk2_AVG
,Case when NVL(Wk1_AVG,0) =0 then NULL else (Wk2_AVG - Wk1_AVG) / Wk1_AVG end as Price_var
FROM B
GROUP BY B.Week, B.ASIN, B.GL, B.Wk1_AVG, B.Wk2_AVG
)
SELECT C.*
FROM C
HAVING Price_var >= 0.3
所以错误消息告诉我:“ c.week”列必须出现在GROUP BY子句中或在聚合函数中使用。而且我不明白我没有分组或应该分组。
我感谢您的任何评论,并感谢您的帮助!
答案 0 :(得分:1)
我不确定,因为我无法重现这种情况。但是我认为问题出在最后的Boolean
上。您正在使用map.loaded.call(map).asInstanceOf[Boolean] //Passing in map as the execution context (this)
,它用于聚合列(即SELECT ... FROM C
)。由于最后一个HAVING
没有聚合,因此简单的SUM(...)
就足够了。
SELECT
希望这对您有帮助...