2015-03-02 2 views
0

мне нужен один запрос для подсчета множественного значения состояния ...MySQL один запрос для подсчета нескольких значений

Таблица

+-------------+------------------+--------+ 
| ID   | Name    | Status | 
+-------------+------------------+--------+ 
| 50   | Name1   | 1  | 
| 49   | Name2   | 2  | 
| 50   | Name1   | 1  | 
| 49   | Name2   | 1  | 
| 50   | Name1   | 2  | 
| 50   | Name1   | 2  | 
| 50   | Name1   | 3  | 
| 50   | Name1   | 3  | 
| 50   | Name1   | 1  | 
+-------------+------------------+--------+ 

Ожидая из положить:

+-------------+------------------+--------------+--------------+--------------+ 
| ID   | Name    | Cnt(Status1) | Cnt(Status2) | Cnt(Status3) | 
+-------------+------------------+--------------+--------------+--------------+ 
| 50   | Name1   | 3   | 2   | 2   | 
| 49   | Name2   | 1   | 1   | 0   | 
+-------------+------------------+--------------+--------------+--------------+ 

мне нужен запрос для над выводом ...

ответ

0

Вы можете использовать условную сумму, чтобы сделать это

select 
id, 
Name, 
sum(Status=1) as cnt_status1, 
sum(Status=2) as cnt_status2, 
sum(Status=3) as cnt_status3 
from table_name 
group by id,Name 
0

Я догадывался, это будет делать трюк:

SELECT 
    ID, 
    Name, 
    COUNT(CASE WHEN Status = 1 THEN 1 ELSE 0 END), 
    COUNT(CASE WHEN Status = 2 THEN 1 ELSE 0 END), 
    COUNT(CASE WHEN Status = 3 THEN 1 ELSE 0 END) 
FROM TABLE 
GROUP BY 
    ID, 
    Name