You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询如何统计每部电影对应含NULL的三类性别人数

问题排查
  • 统计逻辑问题:COUNT(字段名)的特性是会跳过该字段为NULL的记录,所以你原来的写法自动排除了Gender为NULL的行,要统计所有符合条件的行数,改用COUNT(*)即可。
  • NULL匹配问题:SQL中IN运算符无法匹配NULL值,你写的P.Gender IN ('Male',NULL, 'Female')实际只能匹配到Male和Female两类,NULL值会被过滤,判断NULL需要单独用IS NULL语法。
  • 分组逻辑问题:原语句仅按MC.MID分组,未将P.Gender加入分组维度,返回的Gender字段取值不符合预期,也无法拆分出三类性别的独立计数。
修正后的查询语句

如果你需要的是「每部电影+每种性别」对应一行的长表格式,和你原来输出结构一致,只是补上NULL类别的计数,用下面的写法:

movie_female_cast = pd.read_sql_query(""" 
SELECT TRIM(MC.MID) AS movie_id, COUNT(*) AS gender_cnt, P.Gender 
FROM M_Cast MC
INNER JOIN Person P
ON P.PID = TRIM(MC.PID)
WHERE P.Gender IN ('Male', 'Female') OR P.Gender IS NULL
GROUP BY TRIM(MC.MID), P.Gender 
""",conn)

如果你需要更方便后续pandas处理的宽表格式,每部电影只占一行,三列分别对应Male、Female、NULL的人数,可以用条件聚合写法:

movie_gender_cnt = pd.read_sql_query(""" 
SELECT 
    TRIM(MC.MID) AS movie_id,
    SUM(CASE WHEN P.Gender = 'Male' THEN 1 ELSE 0 END) AS male_cnt,
    SUM(CASE WHEN P.Gender = 'Female' THEN 1 ELSE 0 END) AS female_cnt,
    SUM(CASE WHEN P.Gender IS NULL THEN 1 ELSE 0 END) AS null_gender_cnt
FROM M_Cast MC
INNER JOIN Person P
ON P.PID = TRIM(MC.PID)
GROUP BY TRIM(MC.MID)
""",conn)

内容的提问来源于stack exchange,提问作者BKH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:45:03