给定:
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:如何“按范围”分组?
在MySQL中获取十进制范围的频率分布
generate_series
非常有用,它还可以与时间戳一起使用,所以再见了日历表。 - mu is too short