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计数之间的范围?
我发现了类似的计算范围的问题,一些为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
这很好。好的功能知道。 – Glenn 2012-03-13 02:46:05
优雅的答案,@ mu_is_too_short!我试过了,它工作。正是我在找的东西。谢谢! – 2012-03-13 02:47:03
@Glenn:是的,'generate_series'非常有用,它也可以处理时间戳,所以再见日历表。 – 2012-03-13 05:44:53