多个不同的计数与何处

时间:2014-06-27 14:43:13

标签: mysql sql

我遇到了一个问题,即为具有不同where子句的列的多个不同计数创建最有效的查询。我的MYSQL表如下所示:

id    client_id    result       timestamp
---------------------------------------------------
 1    1234566      escalated    2014-01-02 00:00:00
 2    1233344      approved     2014-02-03 00:00:00
 3    1234566      escalated    2014-01-02 01:00:00

我想要实现的是在返回中构建以下数据:

从一开始就处理的唯一客户ID的总数。

从一开始就升级处理的唯一客户ID的总数。

从一开始就批准处理的唯一客户ID的总数。

使用时间戳上的语句在指定时间范围内批准的唯一客户端ID的计数。

使用时间戳记之间的语句在指定时间范围内升级的唯一客户端ID计数。

我考虑过运行多个选项,但我认为这会浪费资源,如果可以通过单个查询完成,那么最好的方法就是处理它,不幸的是我的经验在这个方面缺乏。我想要的是返回简单包含别名和计数。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要条件聚合,例如:

select count(distinct ClientId) as NumClients,
       count(distinct case when result = 'Approved' then ClientId end) as NumApproved,
       count(distinct case when result = 'Escalated' then ClientId end) as NumEscalated,
       count(distinct case when result = 'Approved' and timestamp between @Time1 and @Time2 
                           then ClientId end) as NumApproved,
       count(distinct case when result = 'Escalated' and timestamp between @Time1 and @Time2
                           then ClientId end) as NumEscalated,
from table t;