2011-11-21 66 views
1
Table 1 : (Company) 

ID Name 
1 A 
2 B 
3 C 

每個公司(pk = ID)都可以有一個或多個員工。有沒有可能通過計數(不同)沒有加入一個組?

Table 2 : (Employee) (CompanyID referencing ID) 

CompanyID EmpID Name 
1   1  Joe 
1   2  Doe 
1   3  Boe 
2   4  Lou 
3   5  Su 
3   6  Ram 

查詢:

select CompanyID, count(*) from Employee group by CompanyID having count(*) > 1; # Lists companies and their counts. 

CompanyID count(*) 
1   3 
3   2 

對於此查詢,我只想要一個結果,具有鮮明的CompanyIDs的計數。因此,在這種情況下,'2'[公司A和C]。

總之,我正在尋找擁有2名或更多員工的公司數量。

反正有沒有臨時表或連接得到結果?我正在使用MySQL。

回答

3

是:

select count(*) from 
(select CompanyID from Employee group by CompanyID having count(*) > 1) v 

或範圍:

select count(*) from 
(select CompanyID from Employee group by CompanyID 
having count(*) >= 5 and count(*) < 10) v 
+0

我正在考慮這個解決辦法,但我認爲這可能不是最有效的。可能是這樣!謝謝... – ThinkCode

+0

我們可以在範圍上計數(*)嗎?說有5個或更多員工但少於10人的公司數量? – ThinkCode

+1

@ThinkCode:是 - 請參閱編輯答案。 –

0

是的,這可能與子查詢:

SELECT COUNT(*) 
FROM 
    (SELECT 1 
    FROM Employee 
    GROUP BY CompanyID 
    HAVING COUNT(*) > 1 
) AS grp 

或:

SELECT COUNT(DISTINCT CompanyID) 
FROM Employee AS e 
WHERE EXISTS 
     (SELECT * 
     FROM Employee AS e2 
     WHERE e2.CompanyID = e.CompanyId 
      AND e2.EmpID <> e.EmpID 
    ) 

或許如果COUNT(*)很慢,你可以使用MIN()MAX()

SELECT COUNT(*) 
FROM 
    (SELECT 1 
    FROM Employee 
    GROUP BY CompanyID 
    HAVING MAX(EmpID) > MIN(EmpId) 
) AS grp 
+0

錯誤代碼:1248.每個派生表都必須有自己的別名。所以需要一個別名我猜.. – ThinkCode

+0

是的,在子查詢中需要別名。 –