繁体   English   中英

合并来自同一来源的两个计数查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM