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

如何使用SQL COUNT结合多GROUP BY按年份统计学生族裔人数

统计报表实现方案

完全可以通过COUNT函数配合分组逻辑生成目标维度统计表,不需要编写多组独立GROUP BY查询,单条SQL即可完成高效统计。

已知表结构映射

  • 学生数据表:表名可记为students,包含3个字段
    • Student_id:学生唯一标识ID
    • year:学生就读年份
    • ethnicity_id:关联族裔维度的ID
  • 族裔维度表:表名可记为ethnicities,包含2个字段
    • Ethnicity_id:族裔唯一ID
    • Name:族裔显示名称,固定ID映射规则为:1=Black/AA、2=Hispanic/Latinx、3=Asian

核心实现逻辑

目标报表为典型的行转列聚合场景:行维度为就读年份,列维度为三个固定族裔,单元格为对应维度的学生去重计数。最优实现方式是仅按就读年份单字段做GROUP BY,在COUNT函数内通过条件判断分别统计对应族裔的学生数量,该写法仅需扫描一次学生表即可完成全量聚合,性能远高于多分组后关联的写法。

可直接复用的SQL代码

SELECT
  s.year AS 就读年份,
  COUNT(DISTINCT CASE WHEN s.ethnicity_id = 1 THEN s.Student_id END) AS `Black/AA`,
  COUNT(DISTINCT CASE WHEN s.ethnicity_id = 2 THEN s.Student_id END) AS `Hispanic/Latinx`,
  COUNT(DISTINCT CASE WHEN s.ethnicity_id = 3 THEN s.Student_id END) AS `Asian`
FROM students s
-- 若已确认ethnicity_id映射规则固定,可省略维度表关联,进一步提升查询速度
LEFT JOIN ethnicities e
  ON s.ethnicity_id = e.Ethnicity_id
WHERE s.year IN (2022, 2023, 2024)
GROUP BY s.year
ORDER BY s.year;

注意事项

  • 若确认学生表中Student_id + year为唯一主键(即同一年份同一个学生不会出现重复记录),可去掉COUNT内的DISTINCT,进一步压缩查询耗时。
  • 不建议编写3组独立GROUP BY查询再通过年份关联结果的写法,该写法会多次扫描全量学生数据,数据量级较大时性能损耗明显。

若需要统计所有就读年份的族裔分布,直接去掉WHERE子句中的年份筛选条件即可,查询结果会自动按表内实际存在的就读年份逐行输出统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:09:18