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

MySQL如何使用多WHERE条件按县分组统计7个种族总人口

数据集样例截图1
数据集样例截图2

问题解答

不需要为每个种族单独建视图,也不需要写多个WHERE条件反复连表,用条件聚合就能一次性实现按县分组统计所有种族的总人口,比你现在写视图+JOIN的方案更简洁,查询性能也更高。

你当前的写法如果要扩展到7个种族,需要建7个对应种族的视图、做7次表关联,冗余度很高,还容易因为关联匹配问题漏数。直接用CASE WHEN配合聚合函数SUM,单表查询一次就能出结果,参考写法如下:

SELECT 
    county AS County,
    SUM(CASE WHEN race = 'White, Non-Hispanic' THEN population ELSE 0 END) AS `White pop`,
    SUM(CASE WHEN race = 'Asian, Non-Hispanic' THEN population ELSE 0 END) AS `Asian pop`,
    -- 剩余5个种族按照上述格式补充即可,替换成你数据集里实际的race字段值
    SUM(CASE WHEN race = 'Black, Non-Hispanic' THEN population ELSE 0 END) AS `Black pop`,
    SUM(CASE WHEN race = 'Hispanic/Latino' THEN population ELSE 0 END) AS `Hispanic pop`,
    SUM(CASE WHEN race = 'American Indian/Alaska Native, Non-Hispanic' THEN population ELSE 0 END) AS `AIAN pop`,
    SUM(CASE WHEN race = 'Native Hawaiian/Pacific Islander, Non-Hispanic' THEN population ELSE 0 END) AS `NHPI pop`,
    SUM(CASE WHEN race = 'Two or More Races, Non-Hispanic' THEN population ELSE 0 END) AS `Multiracial pop`
FROM ca_pop
WHERE date_year = '2022'
GROUP BY county;

语句逻辑很简单:遍历2022年的所有人口数据时,CASE WHEN会判断当前行的种族,匹配对应种族就把人口数计入对应列,不匹配就计0,最后按县分组求和,就能得到每个县各个种族的总人口。你只需要把上述语句里race =后面的文本替换成你自己数据集里实际存储的7个种族的取值即可。

如果你不需要宽表格式(每个种族单独占一列),想要长表格式(每行对应「某县+某种族」的总人口),写法更简单,不需要手动枚举所有种族:

SELECT 
    county AS County,
    race AS Race,
    SUM(population) AS Total_pop
FROM ca_pop
WHERE date_year = '2022'
GROUP BY county, race;

这个写法会自动按县、种族两个维度分组,数据集里存在多少个种族就会输出多少组统计结果。


内容的提问来源于stack exchange,提问作者Anna Quoc Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:45:39