2016-10-04 4 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    | 
--------------------------------------------------- 

私はtypesテーブルのタイプに基づいてdistinct detailsのカウントを取得する必要があります。

私はこのクエリを試しましたが、私が得ている最大値は、すべてのカウントであり、明確な値ではありません。

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

関連する問題