2015-11-09 12 views
10

Oto mój stół trans:Jak korzystać grupy przez kolumnę w zależności od drugiej kolumnie

id // user_id // money // type // date 
1  1001   20  1 2015-11-1 
2  1001   50  1 2015-11-1 
3  1001   50  2 2015-11-2 
4  1001   50  2 2015-11-3 
5  1002   10  2 2015-11-3 
6  1002   20  2 2015-11-1 
7  1002   70  3 2015-11-1 
8  1003   80  1 2015-11-2 
9  1003   10  1 2015-11-3 
10  1003   20  1 2015-11-3 

Chcę wyjście jak:

id // user_id // sum_money_1 // sum_money_2 // sum_money_3 // date 
1  1001   10    10    20  2015-11-1 
2  1001   20    10    30  2015-11-2 
3  1001   30    10    10  2015-11-3 
4  1002   90    20    10  2015-11-1 
5  1002   20    40    20  2015-11-3 
6  1003   80    20    30  2015-11-2 
7  1003   30    10    10  2015-11-3 

co oznacza grupę suma pieniędzy przez każdego dnia, każdego typu i wyświetlaj według każdego identyfikatora.

Próbowałem to:

SELECT a.id, a.user_id, 
(SELECT sum(a1.money) FROM trans a1 where a1.type = 1) AS sum_type1, 
(SELECT sum(a2.money) FROM trans a2 where a2.type = 1) AS sum_type2, 
(SELECT sum(a3.money) FROM trans a3 where a3.type = 3) AS sum_type3, 
a.date FROM trans a group by a.user_id,a.date 

Ale to nie udało, i wraca jak:

id // user_id // sum_money_1 // sum_money_2 // sum_money_3 // date 
1  1001   90    70    80  2015-11-1 
2  1001   90    70    80  2015-11-2 
3  1001   90    70    80  2015-11-3 
4  1002   90    70    80  2015-11-1 
5  1002   90    70    80  2015-11-3 
6  1003   90    70    80  2015-11-2 
7  1003   90    70    80  2015-11-3 

sumują wszystkie pieniądze za każdego użytkownika.

+1

gdzie jest twoje zapytanie, które wypróbowałeś? –

+0

Zmieniłem swój wpis, dzięki. – Windsooon

Odpowiedz

14

Można użyć SUM i CASE WHEN:

SELECT `user_id` , `date`, 
    SUM(CASE WHEN `type` = 1 THEN `money` ELSE 0 END) AS sum_money_1, 
    SUM(CASE WHEN `type` = 2 THEN `money` ELSE 0 END) AS sum_money_2, 
    SUM(CASE WHEN `type` = 3 THEN `money` ELSE 0 END) AS sum_money_3 
FROM your_table 
GROUP BY user_id, `date` 
ORDER BY user_id, `date`; 

Ostrzeżenie:

Jak powinny być generowane kolumnie id?

Powiązane problemy