2016-10-04 81 views
0

我有以下表格。MySQL根据不同表格的条件计数

 

Table : types 
-------------------- 
id | type 
-------------------- 
1 | AA 
-------------------- 
2 | BB 
-------------------- 
3 | AA 
-------------------- 
4 | BB 
--------------------  


Table : users 
-------------------- 
id | username 
-------------------- 
1 | abc 
-------------------- 
2 | bcd 
-------------------- 
3 | cde 
-------------------- 
4 | def 
--------------------      


Table : methods 
--------------------------------- 
id | user_id | details | type_id 
--------------------------------- 
1 | 1  | detail_1 | 1 
--------------------------------- 
2 | 1  | detail_2 | 3 
--------------------------------- 
3 | 1  | detail_3 | 1 
--------------------------------- 
4 | 1  | detail_4 | 3 
--------------------------------- 
5 | 2  | detail_3 | 1 
--------------------------------- 
6 | 2  | detail_5 | 2 
--------------------------------- 
7 | 2  | detail_6 | 4 
--------------------------------- 
8 | 2  | detail_2 | 3 
--------------------------------- 
9 | 1  | detail_2 | 3 
--------------------------------- 
10 | 1  | detail_2 | 3 
--------------------------------- 


Desired Result : 
--------------------------------------------------- 
UserName | No_of_AA_details | No_of_BB_details | 
--------------------------------------------------- 
abc  | 4    | 0    | 
--------------------------------------------------- 
bcd  | 2    | 2    | 
--------------------------------------------------- 

我需要的distinct details基于从types表型计数。

我已经试过这个查询,但我得到的最大值是所有的计数,而不是独特的值。

SELECT u.username, 
CASE WHEN t.type = 'AA' THEN count(distinct m.details) END AS No_of_AA_details, 
CASE WHEN t.type = 'BB' THEN count(distinct m.details) END AS No_of_BB_details 
FROM users as u inner join methods as m on u.id = m.user_id inner join types as t on t.id = m.type_id 
GROUP BY m.user_id 


SELECT u.username, 
SUM(t.type = 'AA') AS No_of_AA_details, 
SUM(t.type = 'AA') AS No_of_BB_details 
FROM users as u inner join methods as m on u.id = m.user_id inner join types as t on t.id = m.type_id 
GROUP BY m.user_id 

欢迎任何建议。

回答

0

我无法测试它的权利知道,但我认为你有一个好主意,你可以尝试:

SELECT u.username, 
    m.user_id, 
    CASE 
    WHEN t.type = 'AA' THEN 1 
    ELSE 0 
    END AS No_of_AA_details, 
    CASE 
    WHEN t.type = 'BB' THEN 1 
    ELSE 0 
    END AS No_of_BB_details 
FROM users as u 
INNER JOIN methods as m on u.id = m.user_id 
INNER JOIN types as t on t.id = m.type_id 

,现在你只需要做的总和:

SELECT u.username, 
     m.user_id, 
     SUM (CASE 
     WHEN t.type = 'AA' THEN 1 
     ELSE 0 
     END) AS No_of_AA_details, 
     SUM (CASE 
     WHEN t.type = 'BB' THEN 1 
     ELSE 0 
     END) AS No_of_BB_details 
    FROM users as u 
    INNER JOIN methods as m on u.id = m.user_id 
    INNER JOIN types as t on t.id = m.type_id 
    GROUP BY u.username, m.user_id 
+0

谢谢对于这个回答,但是这个没有提供一个类型的不同细节......它给出了这种类型的条目数量的总数...... :( – user2595861