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

求按双分组条件统计的MySQL查询:按部门及可用性统计学生数

按部门及可用性统计学生数量的MySQL查询方案

首先我先假设下常见的业务表结构(如果你的实际字段/表名不一样,直接替换成对应名称就行):

  • departments 部门表:id(部门唯一ID)、dept_name(部门名称)
  • students 学生表:id(学生唯一ID)、dept_id(关联部门的外键)、is_available(可用性标识,比如1=可用,0=不可用,或是枚举字符串)

核心查询语句(兼容后续新增部门)

考虑到你提到后续可能新增部门,必须用左连接保证所有部门(哪怕还没有学生)都能出现在统计结果里,不会遗漏新部门:

SELECT
    d.id AS dept_id,
    d.dept_name AS department_name,
    s.is_available AS availability,
    COUNT(s.id) AS student_count
FROM
    departments d
LEFT JOIN
    students s ON d.id = s.dept_id
GROUP BY
    d.id, d.dept_name, s.is_available
ORDER BY
    d.id, s.is_available;

关键细节说明

  • LEFT JOIN的必要性:如果用普通内连接,没有学生的新部门会被过滤掉,左连接能确保所有部门都被统计到,无学生的部门对应student_count为0。
  • 分组逻辑:按部门(同时用ID+名称,避免同名称不同ID的部门冲突)和可用性维度分组,保证每个维度组合都有独立的统计结果。
  • 处理NULL值优化:如果某个部门没有学生,s.is_available会显示为NULL,你可以用COALESCE把它替换成更友好的标签:
    SELECT
        d.id AS dept_id,
        d.dept_name AS department_name,
        COALESCE(s.is_available, '无学生') AS availability,
        COUNT(s.id) AS student_count
    FROM
        departments d
    LEFT JOIN
        students s ON d.id = s.dept_id
    GROUP BY
        d.id, d.dept_name, COALESCE(s.is_available, '无学生')
    ORDER BY
        d.id;
    

适配多状态可用性场景

如果你的可用性是多状态枚举(比如'可用'/'不可用'/'待审核'这类字符串),上面的查询逻辑完全通用,只需要确保分组字段包含该枚举字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:13:28