mysql - 在两个不同的条件下选择一个计数

标签 mysql

假设我有以下数据。

id  name_id   completed
1    10          1
2    10          0
3    15          1
4    10          0
5    20          1
6    15          0
7    20          1 
8    15          0 

我正在尝试通过名称 id 查找计数,这非常简单

SELECT name_id, COUNT(*) FROM db 
GROUP BY name_id

现在,我有第二个要包含在查询中的组件。

对于 name_id 10,我只想计算那些 completed 为 1 的值。对于其他 name_id,我想选择它们,而不管它们是 0 还是 1。

所以我应该结束:

name_id     count(*)
10            1
15            3
20            2

Name_id 10 只有 1 的计数,因为它只是完成的 1,而其他计数包括 0 和 1。

任何人都可以帮助完成这项任务。

谢谢!

最佳答案

您可以在聚合函数中使用 CASE 表达式。

SELECT name_id, 
  sum(case 
          when name_id = 10 
          then case when completed = 1 then 1 else 0 end
          else 1 end)  Total
FROM db 
GROUP BY name_id;

参见 SQL Fiddle with Demo .

关于mysql - 在两个不同的条件下选择一个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346242/

相关文章:

mysql - 查找 MySQL 数据集的行之间的最小时间间隔

MYSQL 不会删除时间戳的默认值

mysql - 条件下一次出现之前的值求和

mysql - 页面布局搞砸了

javascript - 使用sequelize原始查询node.js将tinyint字段转换为结果中的 bool 值

java - hibernate 以持久保存日期

java - 如何使用java避免Mysql数据库中的 'Data truncated for column'?

mysql - 想要创建一个只显示一列MYSQL的子查询

php - 我需要一个 mysql group by query 以在每个员工的一行中从每个员工的日期时间列返回每小时条目

Mysql Group By 和 ABS 函数堆栈