使用HAVING运算符进行简单查询

时间:2011-03-02 18:45:14

标签: sql aggregate-functions having-clause

我有一个Employees表,它包含两列:Employee和DepartmentId,如下所示

|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

但在执行期间,它会抱怨无效的列名(Quantity)。我很确定使用聚合函数两次(select count()... having count())是不正确的。我错过了什么吗? 附: “直截了当”的解决方案是我猜的

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

  SELECT Department, COUNT(Employee) AS cnt
    FROM Employees
GROUP BY Department
  HAVING COUNT(Employee) > 5

这也适用于SQL Server。

答案 2 :(得分:0)

我试过了..以下查询工作正常..希望这有帮助......

SELECT部门 来自员工 GROUP BY部门 HAVING count(Employee)> 2;