如何使用 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;
如果你只有Vehicle
table,这是糟糕的数据库设计,那么我们可以试试下面的查询:
SELECT
region,
SUM(CASE WHEN wheel = 4 AND polluted = 'yes' THEN 1 ELSE 0 END) AS count
FROM Vehicle
GROUP BY region;
这是低效的,但至少它可以让你报告每个地区,即使它没有匹配的记录。
我是 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;
如果你只有Vehicle
table,这是糟糕的数据库设计,那么我们可以试试下面的查询:
SELECT
region,
SUM(CASE WHEN wheel = 4 AND polluted = 'yes' THEN 1 ELSE 0 END) AS count
FROM Vehicle
GROUP BY region;
这是低效的,但至少它可以让你报告每个地区,即使它没有匹配的记录。