假设我有这张桌子:
id | status | type
----+--------+----------
1 | new | car
2 | new | boat
3 | used | car
4 | new | car
我想一口气统计一下所有new
的车辆和cars
的数量,该怎么做?
我尝试过:
SELECT COUNT(status='new'), COUNT(type='car') FROM table;
,但是它总是计数为4(总行数)。我唯一想到的就是在CASE
内使用COUNT
,但是有没有更清洁的方法?
答案 0 :(得分:1)
您可以使用FILTER
进行条件聚合:
SELECT COUNT(*) FILTER(WHERE status='new'), COUNT(*) FILTER(WHERE type='car')
FROM tab;
或者SUM
:
SELECT SUM((status='new')::int), SUM((type='car')::int) FROM table;