2011-03-02 87 views
1

簡單的查詢我公司員工的表,該表由兩列組成:員工和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 

但在執行期間它抱怨無效的列名稱(數量)。我敢肯定,使用聚合函數兩次(select count()...有count())是不正確的。我錯過了什麼嗎? p.s. 「直白」 的解決方案是我猜

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

對於什麼數據庫?有些允許在GROUP BY和HAVING中使用列別名,而另一些則不允許。 – 2011-03-02 18:53:42

+0

最好使用COUNT(*),因爲它允許查詢管理者選擇要計數的字段/索引。 – 2011-03-02 19:14:37

回答

3

HAVING COUNT(*) > 3是罰款。數據庫將只評估一次表達式,並在select和having子句中重複使用結果。

您在示例中選擇子查詢中的值也很好(除了需要子查詢的別名外)。使用這種技術在這裏不是必須的,但是如果表達式更復雜並且您想避免爲了維護性原因而重複代碼,那麼它可能很有用。

請注意,在MySQL中你想寫的查詢將工作。但是這個MySQL特定的擴展和相同的技術在SQL Server中不起作用。

+0

是的,並非所有數據庫都將「作爲」列名稱結果作爲having子句中的基礎。 – DRapp 2011-03-02 18:49:08

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

這也適用於SQL Server。

0

我已經嘗試過了..下面的查詢剛工作正常..希望這有助於...

SELECT部門 FROM員工 GROUP BY部門 HAVING數(員工)> 2;