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    | 
--------------------------------------------------- 

Мне нужно, чтобы получить отсчет distinct details на основе типа из types таблицы.

Я пробовал эти запросы, но max я получаю все значения, а не отдельные значения.

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

Смежные вопросы