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

在Count聚合函数上使用Min聚合函数的SQL查询问题求助

解决获取员工数最少部门信息的SQL问题

首先,你遇到的语法错误是因为派生表(子查询)没有指定别名——大多数SQL数据库(比如SQL Server、MySQL等)要求FROM子句里的子查询必须有一个别名,否则会报语法错误。

先修正你原来的“获取最小员工数”的查询(仅获取数值):

SELECT MIN(mycount) 
FROM ( 
    select D.DeptID, count(E.EmployeeID) as mycount 
    from Employees as E right join Departments as D on D.DeptID = E.DeptID 
    group by D.DeptID 
) AS dept_counts; -- 这里添加了别名dept_counts

但你真正需要的是员工数最少的部门的完整信息,我给你两种可行的解决方案:

方法一:子查询+关联统计

先通过子查询算出全局最小的员工数,再在主查询中筛选出员工数等于这个最小值的部门:

SELECT D.DeptID, D.Dept, COUNT(E.EmployeeID) AS TotalStaff
FROM Employees AS E 
RIGHT JOIN Departments AS D ON D.DeptID = E.DeptID
GROUP BY D.DeptID, D.Dept
HAVING COUNT(E.EmployeeID) = (
    SELECT MIN(mycount) 
    FROM ( 
        SELECT COUNT(E.EmployeeID) AS mycount 
        FROM Employees AS E RIGHT JOIN Departments AS D ON D.DeptID = E.DeptID 
        GROUP BY D.DeptID 
    ) AS dept_counts
);

方法二:窗口函数(更简洁)

如果你的数据库支持窗口函数(比如SQL Server 2008+、MySQL 8.0+、PostgreSQL等),可以用CTE(公共表表达式)结合窗口函数,一次性计算出每个部门的员工数和全局最小员工数,再筛选结果:

WITH dept_staff_counts AS (
    SELECT 
        D.DeptID, 
        D.Dept, 
        COUNT(E.EmployeeID) AS TotalStaff,
        MIN(COUNT(E.EmployeeID)) OVER () AS MinStaffCount
    FROM Employees AS E 
    RIGHT JOIN Departments AS D ON D.DeptID = E.DeptID
    GROUP BY D.DeptID, D.Dept
)
SELECT DeptID, Dept, TotalStaff
FROM dept_staff_counts
WHERE TotalStaff = MinStaffCount;

这两种方法都会正确返回所有员工数最少的部门(包括像Production、Sales这种员工数为0的部门),和你最初的统计逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:19