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

如何通过SQL关联Student表与Tuition表统计各院系奖学金发放总数?

查询每个院系已发放的奖学金数量(JOIN实现)

嘿,这个需求用JOIN来实现其实很清晰,我先给你理清楚思路,再给你具体的SQL示例~

首先,咱们得明确两个表的关联逻辑:Student表(存院系)和Tuition表(存奖学金)是通过「学生ID」关联的——每个学生属于某个院系,而奖学金是发放给学生的,所以通过学生ID就能把院系和对应的奖学金记录绑定起来。

先假设表结构(如果你的字段名不一样,替换成自己的就行)

  • Student表:student_id(学生主键,唯一标识每个学生)、department_name(院系名称,比如"计算机学院")
  • Tuition表:tuition_id(奖学金记录主键)、student_id(关联Student表的外键)、is_issued(标记是否已发放,比如1=已发放,0=未发放)

场景1:只查询有已发放奖学金记录的院系

用INNER JOIN,它只会返回两个表中匹配成功的记录,也就是只有当某个院系有学生拿到已发放的奖学金时,才会出现在结果里:

SELECT 
    s.department_name,
    COUNT(t.tuition_id) AS issued_scholarship_count  -- 统计已发放的奖学金笔数
FROM 
    Student s
INNER JOIN 
    Tuition t ON s.student_id = t.student_id  -- 通过学生ID关联两张表
WHERE 
    t.is_issued = 1  -- 筛选出已发放的记录
GROUP BY 
    s.department_name;  -- 按院系分组统计

场景2:查询所有院系,包括没有任何已发放奖学金的院系(这类院系数量显示0)

用LEFT JOIN,它会保留Student表的所有记录,即使对应的Tuition表没有匹配的已发放奖学金记录。这时统计数量时,COUNT(t.tuition_id)会自动忽略NULL值,返回0:

SELECT 
    s.department_name,
    COUNT(t.tuition_id) AS issued_scholarship_count
FROM 
    Student s
LEFT JOIN 
    Tuition t ON s.student_id = t.student_id AND t.is_issued = 1  -- 把已发放的条件放到JOIN里,避免过滤掉无数据的院系
GROUP BY 
    s.department_name;

几个关键注意点

  • 如果你的Student表是用department_id(院系ID)而不是直接存department_name,那建议和一个单独的Department表关联,但根据你的描述,Student表已经存了院系信息,所以上面的示例完全适用。
  • 确保Student.student_id和Tuition.student_id是正确关联的(最好设置外键约束),避免出现关联错误的数据。
  • 如果你的"数量"指的是奖学金总金额而非笔数,把COUNT(t.tuition_id)换成SUM(t.scholarship_amount)即可,记得用COALESCE(SUM(...), 0)处理NULL值(比如没有奖学金的院系显示0而不是NULL)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:52:28