mysql - 如何在SQL中有效地统计某些列值的出现次数?

标签 mysql sql data-modeling

我正在使用 MySQL。

我有一个表 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 s,以及两个附加列,用于计算 download_started 的数量和数量download_failed :

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

我只关心 download_started 的状态或download_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 - 如何在SQL中有效地统计某些列值的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239603/

相关文章:

mysql - "sensor system"的最佳数据库设计

php - 数据库不更新值

java - mysql java 参数索引超出范围

php - 将 id 从一个表格带到另一个表格并插入另一个表格

sql - 在导入到 SQL Server 之前自动删除 Excel 中的行

mysql - 在mysql表中存储和查询json

redis - 使用 Redis 的应用程序的数据模型设计

php - 使用php在数据库中插入日期格式

php - 不用sql建表

MySQL - 保持 View 时查询速度慢