SQL报错Selected non-aggregate values must be part of the associated group原因咨询
SQL报错原因分析
你收到的报错提示翻译为:SQL 选择的非聚合值必须属于关联的分组
触发报错的核心原因及其他语法逻辑问题如下:
- 错误1:HAVING子句违规引用未分组字段
你在HAVING中使用了f_ev2.PROCESS_NO,该字段既没有被聚合函数包裹,也没有出现在GROUP BY列表中。HAVING是分组后过滤逻辑,只能引用GROUP BY的字段或者聚合计算结果。且PROCESS_NO的过滤是针对原始行的筛选,不需要放到HAVING,直接移到WHERE子句即可。 - 错误2:SELECT列别名重复
你将f_ev2.Identifier和聚合计算的AVG(f_ev2.Identifier)的别名都设置为了Identifier,会引发解析歧义,需要给平均值列设置一个唯一的别名。 - 错误3:BETWEEN时间范围顺序颠倒
BETWEEN语法要求左值小于等于右值,你写的BETWEEN (date -1) AND (date -10)是用较大的近日期匹配较小的远日期,不会返回任何有效数据,需要调整两个日期的顺序。
修复后的完整SQL代码
SELECT TOP 5 f_ev2.Identifier, AVG(f_ev2.Identifier) AS Avg_Identifier, MIN(f_ev2.Event_dtm) AS Erster_PZ_Scan FROM DB_DWH_MART_AKM_PLT.VW_F_EVENT f_ev2 INNER JOIN ( SELECT DISTINCT f_ev.AUFTRAGGEBER_EKP AS EKP FROM DB_DWH_MART_AKM_PLT.VW_F_EVENT f_ev WHERE f_ev.PROCESS_NO = 1075 ) AS manifest_users ON f_ev2.AUFTRAGGEBER_EKP = manifest_users.EKP WHERE f_ev2.event_dtm BETWEEN (date -10) AND (date -1) AND (f_ev2.PROCESS_NO = 1 OR f_ev2.PROCESS_NO = 2) GROUP BY f_ev2.Identifier
内容的提问来源于stack exchange,提问作者Romero Azzalini
相关产品推荐
相关产品推荐

