如何使用 postgres 按地区 select 车辆计数

How to select vehicle counts group by region using postgres

我是 postgres 的新手。

我的 postgres table 名称是 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')

我的问题是如何select按地区统计被污染的四轮车

预期输出

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

理想情况下,您应该有一个包含所有区域的 regions table。假设这样,您可以编写以下查询:

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;

如果你只有Vehicletable,这是糟糕的数据库设计,那么我们可以试试下面的查询:

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

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