如何从视图中按Teacher_id去重统计正确的性别数量
去重统计教师性别数量
原始视图数据
| Teacher_id | Sex | Missed_Day |
|---|---|---|
| 45 | m | 19-01-2023 |
| 37 | f | 19-01-2023 |
| 45 | m | 01-02-2023 |
| 78 | m | 01-02-2023 |
期望统计结果
要求同一Teacher_id的性别仅统计一次,最终期望结果如下:
| Male | Female |
|---|---|
| 2 | 1 |
当前查询问题
当前使用的查询语句:
COUNT(DISTINCT CASE WHEN Sex = 'm' THEN 1 END) AS Male, COUNT(CASE WHEN Sex = 'f' THEN 1 END) AS Female
得到的错误结果:
| Male | Female |
|---|---|
| 3 | 1 |
错误原因是:针对男性的统计中,Teacher_id=45的重复记录被多次计数,导致男性数量多算1个。
正确查询方案
方案一:先去重再统计
先通过子查询获取每个唯一教师的性别记录,再进行性别计数:
SELECT COUNT(CASE WHEN Sex = 'm' THEN 1 END) AS Male, COUNT(CASE WHEN Sex = 'f' THEN 1 END) AS Female FROM ( SELECT DISTINCT Teacher_id, Sex FROM your_view_name -- 替换为你的视图名称 ) AS unique_teachers;
方案二:直接去重统计教师ID
在COUNT函数中,针对不同性别直接去重统计Teacher_id,确保同一教师仅被计数一次:
SELECT COUNT(DISTINCT CASE WHEN Sex = 'm' THEN Teacher_id END) AS Male, COUNT(DISTINCT CASE WHEN Sex = 'f' THEN Teacher_id END) AS Female FROM your_view_name; -- 替换为你的视图名称
两种方案都能实现需求,确保同一教师的性别不会被重复统计。
内容的提问来源于stack exchange,提问作者Marcos J.D Junior
相关产品推荐
相关产品推荐

