SQL按步骤计算总和/日期计数的商时遇分组表达式序列为空错误
问题原因及解决方法
核心错误点
- 前两个
SELECT语句中使用了聚合函数COUNT(rep_date),但未添加GROUP BY子句。SQL规定:查询中出现非聚合列(比如rep_date、StepCompSum)时,必须将这些列加入GROUP BY,否则会抛出「分组表达式序列为空」「列不是聚合函数」的错误。 - 仅给最后一个
SELECT加GROUP BY无效,前两个查询依然不符合规则,错误无法解决。 - 重复写3个
UNION语句完全冗余,既增加代码复杂度,也影响执行效率。
修正后的SQL代码
直接通过WHERE筛选目标FunCat值,结合GROUP BY完成分组计算,同时用CASE生成AssignRank:
SELECT rep_date, CASE FunCat WHEN 'StepCompA' THEN 1 WHEN 'StepCompB' THEN 2 WHEN 'StepCompC' THEN 3 END AS AssignRank, StepCompSum, FunCat, CAST(StepCompSum / COUNT(rep_date) AS DOUBLE) AS ParticRate FROM TableBlank WHERE FunCat IN ('StepCompA', 'StepCompB', 'StepCompC') GROUP BY rep_date, StepCompSum, FunCat ORDER BY AssignRank
补充说明
如果StepCompSum本身需要先按分组聚合(比如求和),再计算比率,可调整为:
SELECT rep_date, CASE FunCat WHEN 'StepCompA' THEN 1 WHEN 'StepCompB' THEN 2 WHEN 'StepCompC' THEN 3 END AS AssignRank, SUM(StepCompSum) AS StepCompSum, FunCat, CAST(SUM(StepCompSum) / COUNT(rep_date) AS DOUBLE) AS ParticRate FROM TableBlank WHERE FunCat IN ('StepCompA', 'StepCompB', 'StepCompC') GROUP BY rep_date, FunCat ORDER BY AssignRank
内容的提问来源于stack exchange,提问作者confused101
相关产品推荐
相关产品推荐

