统计学生、老师、走读学生数量输出结果,并去除学生和走读学生重复后,输出学生、老师、走读学生合计总数
时间: 2023-07-10 17:43:12 浏览: 88
学生分数的统计,统计某分数的学生人数
假设有学生表`student`,老师表`teacher`,学生类型表`student_type`,学生类型包括`住宿生`和`走读生`,且`student`表中有一个外键`type_id`指向`student_type`表中的`id`字段。
可以使用如下的SQL语句进行统计:
```
-- 统计学生、老师、走读学生数量
SELECT
COUNT(DISTINCT CASE WHEN s.type_id IS NOT NULL THEN s.id END) AS num_student,
COUNT(DISTINCT t.id) AS num_teacher,
COUNT(DISTINCT CASE WHEN s.type_id IS NULL THEN s.id END) AS num_commuter
FROM
student s
LEFT JOIN teacher t ON s.id IS NULL
LEFT JOIN student_type st ON s.type_id = st.id
;
-- 去除学生和走读学生重复后,输出学生、老师、走读学生合计总数
SELECT
COUNT(DISTINCT s.id) AS num_student,
COUNT(DISTINCT t.id) AS num_teacher,
COUNT(DISTINCT CASE WHEN s.type_id IS NULL THEN s.id ELSE st.name END) AS num_commuter
FROM
student s
LEFT JOIN teacher t ON s.id IS NULL
LEFT JOIN student_type st ON s.type_id = st.id
WHERE
s.type_id IS NOT NULL
GROUP BY
s.type_id WITH ROLLUP
;
```
第一条SQL语句统计了学生、老师、走读学生的数量,其中使用了`CASE WHEN`语句来区分学生和走读学生。
第二条SQL语句在第一条的基础上去除了学生和走读学生的重复,并输出了学生、老师、走读学生的合计总数。其中使用了`DISTINCT`关键字去除重复,使用`GROUP BY WITH ROLLUP`对结果进行分组,并使用`CASE WHEN`语句将`NULL`值替换成`住宿生`和`走读生`。
阅读全文