2014-02-27 16 views
0

當我嘗試加入時,出現問題。
以下是我的數據庫。我無法提取計數的確切數量

rank (id, name) 
----------------- 
id | name 
1  CEO 
2  CTO 
3  Employee 
4  Manager 

user (id, position) 
----------------- 
id | position 
1   2 
2   2 
3   3 
4   3 

SQL>

SELECT rank.id, rank.name, count(*) 
     FROM rank 
     LEFT JOIN user 
     ON rank.id = user.position 
     GROUP BY rank.name 

在這種情況下,我有一個像

id | name  | count(*) 
1   CEO   1 
2   CTO   2 
3   Employee  2 
4   Manager  1 

一個答案爲什麼CEOManager被算作 '1'?

我認爲它應該是'0'。

+0

這應該是_GROUP BY rank.id,rank.name_而不是_GROUP BY rank.name_ only。 –

回答

0

左外連接給你每當有用戶表中沒有匹配的空記錄,所以你得到的1計數,然後而不是0

這裏是一個工作的SELECT語句:

SELECT id, name, (select count(*) from user where user.position = rank.id) as cnt 
FROM rank; 

編輯:順便說一句,如果你計算一個用戶字段,你的語句也會工作,因爲NULL值不會被計算在內。所以你會使用COUNT(user.position)而不是COUNT(*)。不過,我更喜歡我的簡單性和可讀性。

0

左連接爲您提供左表中的所有行,無論它們是否與正確的行匹配。由於您確實計數(*),因此它也計入空數。你可以做計數(位置),而不是爲我工作。