1

我有一个员工表,它由两列组成:员工和部门 ID 如下

|Employee  | DepartmentId
-------------------------
| e1       | 1           
| e2       | 1
| e3       | 1
| e4       | 2
| e5       | 2
| e6       | 3
| e7       | 3
| e8       | 3
| e9       | 4
| e10      | 5
| e11      | 6

我想通过简单的查询选择拥有两名以上员工的部门。想出了以下内容:

  SELECT Department, 
         COUNT(Employee) as Quantity
    FROM Employees
GROUP BY Department
  HAVING (Quantity > 3)
ORDER BY Department

但是在执行过程中它抱怨无效的列名(数量)。我很确定使用聚合函数两次(选择 count() ... 有 count())是不正确的。我错过了什么吗?ps“直截了当”的解决方案是我猜

SELECT Department 
  FROM (SELECT Department, COUNT(Employee) AS Quantity
          FROM Employees
      GROUP BY Department)
 WHERE Quantity > 5
4

3 回答 3

3

写作HAVING COUNT(*) > 3很好。数据库只会对表达式求值一次,并在 select 和 having 子句中重用结果。

您在子查询中选择值的示例也很好(除了您需要子查询的别名)。此处不需要使用此技术,但如果表达式更复杂并且出于可维护性原因您希望避免重复代码,则它可能很有用。

请注意,在 MySQL 中,您要编写的查询会起作用。但这是 MySQL 特定的扩展,并且相同的技术在 SQL Server 中不起作用。

于 2011-03-02T18:47:33.377 回答
0
  SELECT Department, COUNT(Employee) AS cnt
    FROM Employees
GROUP BY Department
  HAVING COUNT(Employee) > 5

这也适用于 SQL Server。

于 2011-03-02T18:51:30.453 回答
0

我已经尝试过了..以下查询工作正常..希望这会有所帮助...

SELECT Department FROM Employees GROUP BY Department HAVING count(Employee) > 2;

于 2011-03-02T19:07:39.100 回答