SQL中使用CASE与GROUP BY对苹果表按颜色分类汇总的问题求解
错误原因
- 聚合函数与CASE表达式顺序颠倒:分类统计需要先对单行数据做颜色条件判断,再对符合条件的重量求和,而非先聚合再判断条件。
- 第一段SQL的CASE表达式缺少
END关键字闭合,且GROUP BY中错误加入了apple_wgt字段,分组粒度过细,无法按apple_id完成汇总。 - 第二段SQL在GROUP BY子句中使用了SUM聚合函数,SQL语法不允许在分组依据中使用聚合计算,因此直接触发报错。
正确实现代码
SELECT apple_id, SUM(apple_wgt) AS total_apple_wgt, SUM(CASE WHEN apple_colour != 'no colour' THEN apple_wgt ELSE 0 END) AS apple_wgt_no_colour, SUM(CASE WHEN apple_colour = 'no colour' THEN apple_wgt ELSE 0 END) AS apple_wgt_colour FROM apples GROUP BY apple_id
逻辑说明
代码按apple_id分组完成统计:
- 第一个
SUM直接统计每个apple_id对应的所有苹果总重量 - 后两个
SUM先对每行数据做颜色判断:符合条件则取当前行的apple_wgt值,不符合则取0,求和后即可得到对应分类的总重量 - GROUP BY仅保留
apple_id即可,无需添加其他字段
内容的提问来源于stack exchange,提问作者Muhammad Abdul Haiy Halid
相关产品推荐
相关产品推荐

