汽车盗窃案涉事男女数量统计SQL查询未被接收,求修正
统计汽车盗窃案男女嫌疑人数量的正确SQL写法
原语句的问题
你的SQL存在逻辑错误:
- 按
name和sex分组会拆分到单个嫌疑人,无法得到性别维度的汇总结果 - 多余选择
name、crime_type字段,与汇总统计的目标冲突
正确写法(两种可选)
写法1:按性别分组,分别统计数量
这是最直观的统计方式,结果按性别分行展示:
SELECT s.sex, COUNT(DISTINCT s.name) AS suspect_count FROM SUSPECTS s JOIN CRIMES c ON s.suspect_id = c.suspect_id -- 显式关联字段比NATURAL JOIN更安全 WHERE c.crime_type = 'Car Theft' GROUP BY s.sex;
说明:如果同一嫌疑人不会重复出现在表中,可简化为COUNT(*);若存在重复记录,用COUNT(DISTINCT s.name)避免重复计数
写法2:一行展示男女数量(行转列)
如果需要将男女统计结果放在同一行,使用条件聚合:
SELECT COUNT(CASE WHEN s.sex = 'Male' THEN 1 END) AS male_cnt, COUNT(CASE WHEN s.sex = 'Female' THEN 1 END) AS female_cnt FROM SUSPECTS s JOIN CRIMES c ON s.suspect_id = c.suspect_id WHERE c.crime_type = 'Car Theft';
说明:若需去重,将COUNT(...)替换为COUNT(DISTINCT CASE WHEN s.sex = 'Male' THEN s.name END)即可
内容的提问来源于stack exchange,提问作者Aikul Tungyshbaeva
相关产品推荐
相关产品推荐

