能否用单条SQL语句完成SQLite中学生成绩册人口统计聚合查询?
解决方案
你可以通过条件聚合(使用CASE WHEN配合SUM)来统计男女生人数,SQLite完全支持这种语法。以下是完善后的完整SQL语句:
SELECT g.period AS 班级, COUNT(s.perm_id) AS 学生数, ROUND(AVG(r.percent), 1) AS 百分比, -- 匹配示例结果保留1位小数,需2位可改回2 ROUND(AVG(s.gpa), 2) AS GPA, SUM(CASE WHEN s.gender = '男' THEN 1 ELSE 0 END) AS 男生数, SUM(CASE WHEN s.gender = '女' THEN 1 ELSE 0 END) AS 女生数 FROM rosters r, students s, gradebooks g WHERE r.perm_id = s.perm_id AND r.gradebook_number = g.gradebook_number GROUP BY g.period ORDER BY g.period;
关键说明
- 男女生统计逻辑:
SUM(CASE WHEN s.gender = '男' THEN 1 ELSE 0 END):遍历每个学生,性别为男则返回1,否则返回0,求和后得到男生总数。- 女生统计逻辑同理,仅需修改
CASE WHEN的判断条件。
- 小数位数适配:示例结果中
百分比保留1位小数,因此调整了ROUND函数的第二个参数,若需和原语句一致保留2位,改回ROUND(AVG(r.percent),2)即可。 - 可读性优化建议:推荐使用显式
JOIN语法替代隐式逗号连接,逻辑更清晰:FROM rosters r JOIN students s ON r.perm_id = s.perm_id JOIN gradebooks g ON r.gradebook_number = g.gradebook_number
内容的提问来源于stack exchange,提问作者pedwards
相关产品推荐
相关产品推荐

