具有if条件的SQL聚合函数



我想知道我是否可以在不同的status_id上执行计数功能,条件是status_idX,然后是

这是我当前的查询:

select count(*), status_id
from users
group by status_id

我想修改它,使其具有额外的条件:当users.status_id(18,24,25)中时,检查users.active = true是否存在。在所有其他情况下,无需检查users.active列。

截至目前,我正在进行以下

select count(*), status_id
from users
where 1 = case when status_id in (18,24,25) 
then (case when active = true then 1 else 0 end) 
else 1 end
group by status_id

这是写查询的正确方法还是有更简单的方法?

谢谢

最简单的方法是:

SELECT COUNT(*), status_id
FROM users
WHERE status_id NOT IN (18, 24, 25) OR active = true
GROUP BY status_id

如果你想在结果中包括表中的所有状态id,即使特殊情况下只有假活动行,那么你想做:

select sum(active or status_id not in (18,24,25)), status_id
from users
group by status_id

最新更新