如何有效地计算SQL中某些列值的出现次数?

How to count occurrences of certain column value efficiently in SQL?

我正在使用 MySQL。

我有 table 个 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

我只关心 download_starteddownload_failed 的状态。

非常感谢。

你可以使用这个:

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;

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