2017-02-15 22 views
0

Я использую MySQL.Как эффективно подсчитывать значения определенного столбца в SQL?

У меня есть таблица service_status:

id | service_id | service_status 
    ---------------------------------------------------------------------- 
    0 | 1001  | download_started 
    1 | 1001  | download_started 
    2 | 1002  | download_started 
    3 | 1002  | download_started 
    4 | 1002  | download_failed 
    5 | 1003  | download_started 
    6 | 1003  | download_failed 
    7 | 1003  | something_else 
    8 | 1003  | another_thing 

Я хочу запросить все service_id с, и две дополнительные колонки, которые подсчитывают количество download_started и количество download_failed:

id | service id | download_started | download_failed 
---------------------------------------------------------------------- 
0 | 1001  | 2    | 0 
1 | 1002  | 2    | 1 
2 | 1003  | 1    | 1 

I заботятся только о статусах download_started или download_failed.

Большое спасибо.

+0

Я удалил несовместимые теги базы данных. Вы должны пометить только базу данных, которую вы действительно используете. –

+0

это mysql или sql-сервер? если это сервер sql, вы можете использовать pivot – sumit

+0

Это просто запрос mysql. –

ответ

1

Вы могли бы использовать это:

SELECT 
    service_id, 
    SUM(CASE WHEN service_status = 'download_started' THEN 1 ELSE 0 END) download_started, 
    SUM(CASE WHEN service_status = 'download_failed' THEN 1 ELSE 0 END) download_failed 
FROM 
    table_name 
GROUP BY 
    service_id 
ORDER BY 
    service_id; 
0

В MySQL, можно упростить выражение:

SELECT service_id, 
     SUM(service_status = 'download_started') as download_started, 
     SUM(service_status = 'download_failed') as download_failed 
FROM t 
GROUP BY service_id;