首页 > 解决方案 > 有什么方法可以在同一个 SQL 查询中有多个计数?

问题描述

count()在同一语句中检查具有不同条件的多个不同的最优雅/有效的方法是什么?鉴于 SQL 的语法,我的查询中的每组WHERE/HAVING条件似乎只能有一个 count() 语句。因此,要使用不同的WHERE/HAVING条件集,似乎第二个 count(*) 需要在不同的 select 语句中。将其放入与他们相同的结果集中的最佳方法是UNION什么?有没有其他选择?
理想情况下,我可以做类似的事情:

SELECT count(*) as First, count(*) as Second  
FROM table  
WHERE --conditionals for First  
AND  
--conditionals for Second  

但我认为这是不可能的。UNION是对两个单独的查询执行此操作的唯一方法吗?

标签: sqlcount

解决方案


规范方法case与聚合函数一起使用:

select sum(case when condition1 then 1 else 0 end),
       sum(case when condition2 then 1 else 0 end)

SQL 标准方法使用filter

select count(*) filter (where condition1),
       count(*) filter (where condition2)

推荐阅读