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

如何在子查询中使用COUNT函数?获取招生量最多的部门Reshnum的SQL实现求助

解决仅输出招生量最多部门的ReshNum问题

嘿,你的初始思路其实已经走对方向了,只需要小调整就能达到目标,另外我也给你几种不同场景下的解决方案:

方案1:直接修改原SQL(最简单)

你原来的语句只是多输出了招生数量,只需要把count(*) as Number_of_Adm从select里去掉,把统计逻辑移到order by里就行,还要注意加desc(不然默认升序会拿到招生最少的部门):

select top 1 Department.ReshNum 
from Admission 
inner join Department on Admission.DepartmentId = Department.id 
group by Department.ReshNum 
order by count(*) desc;

这个方法和你的初始逻辑完全一致,只是聚焦在你需要的ReshNum字段上,排序逻辑保留,最终只返回招生量最高的那个部门编号。

方案2:子查询匹配最大招生数(支持并列场景)

如果存在多个部门招生量并列第一的情况,上面的top 1只会返回其中一个,用这个方法可以把所有并列第一的部门都找出来:

select d.ReshNum
from Department d
join (
    -- 先统计每个部门的招生数量
    select DepartmentId, count(*) as adm_count
    from Admission
    group by DepartmentId
) a on d.id = a.DepartmentId
-- 匹配招生数量等于最大值的部门
where a.adm_count = (
    select max(adm_count)
    from (
        select count(*) as adm_count
        from Admission
        group by DepartmentId
    ) t
);

方案3:窗口函数(更灵活的现代写法)

如果你的数据库支持窗口函数(比如SQL Server、PostgreSQL、MySQL 8.0+等),用rank()函数可以更优雅地处理并列场景:

select ReshNum
from (
    select d.ReshNum,
           -- 按招生数降序排名,最多的排第1
           rank() over(order by count(*) desc) as adm_rank
    from Admission a
    join Department d on a.DepartmentId = d.id
    group by d.ReshNum
) t
where adm_rank = 1;

这里rank()会给所有招生量并列第一的部门都标记为1,所以最终会返回所有符合条件的ReshNum,逻辑更清晰易读。

另外提醒一下:你原来的SQL里order by Number_of_Adm没有加desc,默认是升序排序,会返回招生量最少的部门,一定要加上desc才能拿到最多的那个哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:32:46