SQL GROUP BY结合CASE统计学生成绩通过/失败人数异常问题
问题解决:分组统计成绩通过/未通过人数的异常修复
你的问题出在分组依据错误:你用原始字段FinalGradeStudent做分组,这会把每个不同的成绩值单独拆成一组——比如成绩3、4、5会各自生成一个Passed行,成绩1、2生成Failed行,最终就出现了多行重复分类的结果。
正确的SQL写法
有两种可行的修正方式:
方式1:直接分组CASE表达式的结果
SELECT CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END Performance, COUNT(*) Estudents FROM Grade GROUP BY CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END
方式2:分组查询结果的别名(多数数据库支持)
如果你的数据库支持在GROUP BY中使用SELECT里的别名(比如MySQL、PostgreSQL、SQL Server 2008+等),可以用更简洁的写法:
SELECT CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END Performance, COUNT(*) Estudents FROM Grade GROUP BY Performance
效果说明
这两种写法都会按照你定义的Performance类别(Passed/Failed)来分组统计,最终得到你期望的两行结果:一行是Passed对应3人,另一行是Failed对应5人。
内容的提问来源于stack exchange,提问作者Andres
相关产品推荐
相关产品推荐

