在一个查询中计算具有不同条件的行

时间:2019-01-14 16:27:54

标签: postgresql count

假设我有这张桌子:

 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,但是有没有更清洁的方法?

1 个答案:

答案 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;