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

SQL查询:无需按全列分组,统计指定Curriculum的总人数

解决方案

方法1:使用窗口函数(推荐,适用于支持SQL:2003及以上的数据库,如MySQL 8+、PostgreSQL、SQL Server等)

直接通过窗口函数计算每个Curriculum对应的总人数,无需额外分组即可保留每条人员记录:

SELECT
    p.first_name,
    p.last_name,
    a.people_id,
    a.CURRICULUM,
    COUNT(*) OVER (PARTITION BY a.CURRICULUM) AS Curriculum_Count
FROM academic a
JOIN people p ON p.people_id = a.people_id
WHERE a.curriculum IN ('bus', 'acc', 'eng')

说明:

  • COUNT(*) OVER (PARTITION BY a.CURRICULUM)会针对每个CURRICULUM分组统计总人数,并将该值附加到对应分组的每一行记录上,完全匹配你需要的结果格式。
  • 若academic表中存在同一人员同一Curriculum的重复记录,可在SELECT后添加DISTINCT去重。

方法2:子查询预统计后关联(兼容旧版本数据库)

如果你的数据库不支持窗口函数,可以先单独统计每个Curriculum的总人数,再与主查询关联:

SELECT
    p.first_name,
    p.last_name,
    a.people_id,
    a.CURRICULUM,
    c.Curriculum_Count
FROM academic a
JOIN people p ON p.people_id = a.people_id
JOIN (
    SELECT CURRICULUM, COUNT(*) AS Curriculum_Count
    FROM academic
    WHERE CURRICULUM IN ('bus', 'acc', 'eng')
    GROUP BY CURRICULUM
) c ON a.CURRICULUM = c.CURRICULUM
WHERE a.curriculum IN ('bus', 'acc', 'eng')

说明:

  • 子查询c先计算出指定Curriculum的总人数,再通过CURRICULUM字段与主表关联,将总人数映射到每一条人员明细记录中。

原查询问题说明

你的原查询使用GROUP BY academic.curriculum会将相同Curriculum的所有记录合并为一行,仅输出每个Curriculum的汇总结果,丢失了人员的明细信息;同时COUNT函数仅统计分组内的记录数,无法将总人数关联到每条人员记录上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:02:58