我想知道我是否可以在不同的status_id
上执行计数功能,条件是status_id
是X
,然后是
这是我当前的查询:
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