2011-03-22 77 views
0

我有4個表:MySQL的複雜的選擇查詢

user, 
administrative_division, 
assignment, 
user_has_assignment 

用戶和administrative_division之間有一個多對一的關係,其中許多是用戶和一個是administrative_division。在用戶和分配之間,通過user_has_assignment表存在多對多關係。

我能得到多少用戶在每個administrative_division使用以下命令:

select division_id, count(*) from user group by division_id; 

其中,例如,給了我這樣的事情:

division_id count(*) 
    1   4 
    2   10 

我可以通過使用這個命令得到每個用戶擁有多少分配:

select user_id, count(*) from user_has_assignment group by user_id; 

這給類似的結果

user_id count(*) 
    1  2 
    2  10 

但我不知道我怎麼能在一個這樣的查詢結果得到:

division_id user_count assignment_count 
    1   10   20 
    2   2   4 

其中USER_COUNT在每個用戶的總數administrative_division和assignment_count是來自一個特定administrative_division的用戶擁有的所有分配的總和。

+0

如果您在同一個任務中有兩個用戶,您希望發生什麼?那會給計數加1或2嗎? – jswolf19 2011-03-22 12:23:21

+0

它會增加2的數量。 – Nurjan 2011-03-22 13:33:48

回答

2

你只需要加入以上和組結果由devision_id表,所以你會得到一個單列每等分像這樣:在查詢

SELECT ad.devision_id, 
     COUNT(DISTINCT u.user_id) AS user_count, 
     COUNT(DISTINCT a.assignment_id) AS assignment_count 
FROM user u 
    JOIN administrative_division ad ON u.devision_id = ad.devision_id 
    LEFT JOIN user_has_assignment ucon ON u.user_id = ucon.user_id 
    LEFT JOIN assignment a ON a.assignment_id = ucon.assignment_id 

校驗字段名和相應的替換它們以便查詢在您的模式上工作。

+0

非常感謝,BigFatBaby))。有用。 – Nurjan 2011-03-22 16:07:33

+0

@Nurzhan:完全沒問題 - 如果你的問題得到解答,一定要檢查正確的答案,以幫助其他人可能遇到類似的問題 – BigFatBaby 2011-03-22 16:13:05

+0

@Nurzhan,我不認爲這會增加2計數,如果兩一個部門的用戶具有相同的任務。 – jswolf19 2011-03-22 23:58:58