【发布时间】:2017-01-05 20:01:40
【问题描述】:
假设我的表中有以下数据。
表名:任务
+---------+
| status |
+---------+
| open |
| reopen |
| reopen |
| close |
| suspend |
| close |
+---------+
现在,我想按记录组的状态对其进行计数。 但是有一个变化,我想把 open 和 reopen 算在同一组中。
所以我在下面执行这个查询。
SELECT
status,COUNT(*)
FROM
Task
GROUP BY status
A) 我得到了什么。
B) 我想要什么。
A) B)
+---------+---------+ +---------+---------+
| status | count | | status | count |
+---------+---------+ +---------+---------+
| open | 1 | | open | 3 |
| reopen | 2 | | close | 2 |
| close | 2 | | suspend | 1 |
| suspend | 1 | +---------+---------+
+---------+---------+
正如您从上面的 A) 中看到的那样,我得到了查询的结果。 但我想在 open it self 中计算重新打开的记录。 你可以在 B) 中看到。
还有一件事我不希望按水平顺序计数。 你试过了。下面的查询将起作用。
C)
SELECT
COUNT(case status when 'open' then 1 when 'reopen' then 1 else null end) as open
COUNT(case status when 'close' then 1 else null end) as close,
COUNT(case status when 'suspend' then 1 else null end) as suspend
FROM
Task
+---------+---------+---------+
| open | close | suspend |
+---------+---------+---------+
| 3 | 2 | 1 |
+---------+---------+---------+
所以我的问题是如何在不使用选项 C) 的情况下实现上面提到的 B)?
你可以试试这个 sqlfiddle http://sqlfiddle.com/#!9/fdf820
【问题讨论】:
标签: mysql sql select count group-by