如何使用Postgres按区域选择车辆计数

时间:2018-07-12 05:33:02

标签: postgresql postgresql-10

我是Postgres的新手。

我的postgres表名称是Vehicle,由以下几列组成

1.ID
2.name
3. wheel (2,3,4,6,8) // two wheeleer,4 whellers
4. region ('hyderabad','mumbai','delhi',...)
5. polluted ('yes','no')

我的查询是如何选择按区域分组污染的4辆轮车的数量

预期产量

hyderabad -> 4 
mumbai -> 3
delhi -> 8,...

1 个答案:

答案 0 :(得分:1)

理想情况下,您应该在包含所有区域的某个地方放置regions表。假设这样,您可以编写以下查询:

SELECT
    r.region,
    COALESCE(v.cnt, 0) AS count
FROM regions r
LEFT JOIN
(
    SELECT region, COUNT(*) cnt
    FROM Vehicle
    WHERE wheel = 4 AND polluted = 'yes'
    GROUP BY region
) v
    ON r.region = v.region;

如果您只有一个Vehicle表,这是错误的数据库设计,那么我们可以尝试以下查询:

SELECT
    region,
    SUM(CASE WHEN wheel = 4 AND polluted = 'yes' THEN 1 ELSE 0 END) AS count
FROM Vehicle
GROUP BY region;

这效率低下,但是至少它可以让您报告每个区域,即使它没有匹配的记录。