2017-02-15 3 views
0

Ich benutze MySQL.Wie können Vorkommen bestimmter Spaltenwerte in SQL effizient gezählt werden?

Ich habe eine Tabelle von 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 

ich für alle service_id s abfragen möchten, und zwei zusätzliche Spalten, die die Anzahl der download_started und Anzahl der download_failed zählen:

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

I Achten Sie nur auf die Status download_started oder download_failed.

Vielen Dank.

+0

ich die inkompatible Datenbank-Tags entfernt. Sie sollten nur mit der Datenbank markieren, die Sie wirklich verwenden. –

+0

ist es mysql oder sql server? Wenn es SQL-Server ist, können Sie Pivot verwenden – sumit

+0

Es ist nur MySQL-Abfrage. –

Antwort

1

Sie könnten so:

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

In MySQL Sie den Ausdruck vereinfachen:

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; 
Verwandte Themen