我遇到了一个问题,即为具有不同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计数。
我考虑过运行多个选项,但我认为这会浪费资源,如果可以通过单个查询完成,那么最好的方法就是处理它,不幸的是我的经验在这个方面缺乏。我想要的是返回简单包含别名和计数。
任何帮助都将不胜感激。
答案 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;