[英]Combining two count queries from same source
我有两个查询,返回带有计数的服务项目列表。 一个用于整个数据库,另一个用于指定时间段。 它们各自可以很好地工作,但是我想将它们优化为单个查询。
这两个查询是:
SELECT service_type, count(service_type) from qba_customers group by service_type order by count(service_type) desc
SELECT service_type, count(service_type) from qba_customers WHERE created_on BETWEEN '2013-01-01' AND '2013-06-30' group by service_type order by count(service_type) desc
我尝试了一些失败的尝试,以下是我最初认为可以进行的工作:
SELECT service_type, COUNT(service_type) AS full_count, (count(service_type) WHERE created_on BETWEEN '2013-01-01' AND '2013-06-30') AS period_count FROM qba_customers GROUP BY service_type ORDER BY service_type DESC
提前致谢!
如果不是NULL,则所有聚合函数(包括COUNT
)将仅包含一个值。 要仅对日期范围内的行进行计数,请使用CASE
构造作为count参数。 如果CASE返回一个值,则将其计数。 如果不返回值,则不计算:
SELECT
service_type,
COUNT(service_type) AS GrandTotal,
COUNT(CASE WHEN created_on BETWEEN '2013-01-01' AND '2013-06-30' THEN 1 END) AS FirstHalf2013
FROM qba_customers
GROUP BY service_type
ORDER BY GrandTotal
对于FirstHalf2013
列,如果created_on
在目标范围内,则CASE返回一个非空值(我在这里使用1
,但是它可以是任何非空值)。 如果created_on
不在目标范围内,则CASE
返回NULL
,这表示该行未被计数。
使用case语句尝试:
SELECT service_type,
count(service_type) as full_count,
sum(case when created_on between '2013-01-01' and '2013-06-30' then 1 else 0 end) as period_count
FROM qba_customers
GROUP by service_type
ORDER by service_type desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.