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

求助:如何用SQL统计2016年有1次及以上献血的学生人数

解决2016年有献血记录学生人数统计的SQL问题

嘿,别慌,卡一小时太正常了,我来帮你捋清楚问题出在哪~

你的原SQL语句有两个关键问题:

  • 子查询里的HAVING COUNT(*)>1条件错误:这个会只筛选出2016年献血超过1次的学生,但题目要求的是1次及以上,哪怕只献过1次的学生也应该被统计进去;
  • 外层多余的GROUP BY StudID:这会让结果按学生ID分组,返回的是每个符合条件的学生对应的计数(每行都是1),而不是你要的总人数。

给你两种简单且正确的写法:

方法一:最直接的去重计数

SELECT COUNT(DISTINCT StudID) 
FROM DONA 
WHERE YEAR(DonDate) = 2016;

这个逻辑很清晰:先筛选出2016年的所有献血记录,然后对StudID去重后统计数量,就是有过献血记录的学生总数。

方法二:修正你的子查询写法

如果你想用分组的思路,也可以改成这样:

SELECT COUNT(*) 
FROM (
    SELECT StudID 
    FROM DONA 
    WHERE YEAR(DonDate) = 2016 
    GROUP BY StudID
) AS student_list;

子查询会把2016年有献血记录的学生ID分组去重,得到一个唯一学生ID的列表;外层直接统计这个列表的行数,就是你要的总人数。

这样改完应该就能得到正确结果啦~

内容的提问来源于stack exchange,提问作者Ching To Jeremy Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:33