【发布时间】:2012-03-29 10:59:05
【问题描述】:
给定:
table 'thing':
age
---
3.4
3.4
10.1
40
45
49
我想计算每个 10 年范围内的事物数量,例如,
age_range | count
----------+-------
0 | 2
10| 1
20| 0
30| 0
40| 3
这个查询很接近:
SELECT FLOOR(age / 10) as age_range, COUNT(*)
FROM thing
GROUP BY FLOOR(age / 10) ORDER BY FLOOR(age / 10);
输出:
age_range | count
-----------+-------
0 | 1
1 | 2
4 | 3
但是,它没有向我显示计数为 0 的范围。如何修改查询,使其也显示介于 0 计数之间的范围?
我发现了关于计数范围的类似 stackoverflow 问题,其中一些计数为 0,但它们涉及必须指定每个范围(将范围硬编码到查询中,或者将范围放入表中)。我更喜欢使用像上面这样的通用查询,我不必明确指定每个范围(例如,0-10、10-20、20-30,...)。我正在使用 PostgreSQL 9.1.3。
有没有办法修改上面的简单查询以包含 0 个计数?
类似:
Oracle: how to "group by" over a range?
Get frequency distribution of a decimal range in MySQL
【问题讨论】:
标签: sql postgresql group-by aggregate-functions