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