字段必须出现在GROUP BY子句中或在聚合函数中使用

时间:2019-01-24 10:16:52

标签: sql group-by

我正在尝试编写一个包含子查询的查询,该子查询包含聚合函数。我收到一条错误消息,告诉我应该在主查询的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子句中或在聚合函数中使用。而且我不明白我没有分组或应该分组。

我感谢您的任何评论,并感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不确定,因为我无法重现这种情况。但是我认为问题出在最后的Boolean上。您正在使用map.loaded.call(map).asInstanceOf[Boolean] //Passing in map as the execution context (this) ,它用于聚合列(即SELECT ... FROM C)。由于最后一个HAVING没有聚合,因此简单的SUM(...)就足够了。

SELECT

希望这对您有帮助...