如何使用LEFT OUTER JOIN统计未选课学生人数并按性别分组
实现步骤及SQL代码
核心逻辑说明
你需要的统计可以通过三步实现:
- 用
LEFT OUTER JOIN关联学生表和选课表,保留所有学生记录,未选课学生对应的选课表字段会返回NULL - 通过判断选课表ID是否为NULL筛选出未选课的学生,用
SUM()累加计数 - 按性别字段分组得到各性别的未选课人数
完整可运行SQL
SELECT s.Gender, SUM(CASE WHEN l.ID IS NULL THEN 1 ELSE 0 END) AS total FROM Student s LEFT OUTER JOIN Lessons l ON s.ID = l.ID GROUP BY s.Gender;
补充说明
如果你的数据库对英文字符大小写敏感,导致Boy和boy被分为两个不同分组,可以统一大小写后再分组,示例调整如下:
SELECT -- 统一为首字母大写其余小写的格式,可根据需要自行调整 CONCAT(UPPER(LEFT(s.Gender, 1)), LOWER(RIGHT(s.Gender, LENGTH(s.Gender)-1))) AS Gender, SUM(CASE WHEN l.ID IS NULL THEN 1 ELSE 0 END) AS total FROM Student s LEFT OUTER JOIN Lessons l ON s.ID = l.ID GROUP BY CONCAT(UPPER(LEFT(s.Gender, 1)), LOWER(RIGHT(s.Gender, LENGTH(s.Gender)-1)));
运行后即可得到你需要的统计结果:
| Gender | total |
|---|---|
| Boy | 2 |
| Girl | 1 |
内容的提问来源于stack exchange,提问作者blue emperor
相关产品推荐
相关产品推荐

