回答
如果你想,你沒有任何電影,以及那些電影,那麼你的十年可以使用generate_series
來建立幾十年的列表,並對錶格執行左外連接; generate_series
是在PostgreSQL中實時創建數字和時間列表的標準方法。像這樣的東西應該讓你開始:
select decade.d, count(t.year)
from generate_series(1900, 2100, 10) as decade(d)
left outer join your_table t on decade.d = floor(t.year/10) * 10
group by decade.d
order by decade.d
這將產生輸出這樣的:
d | count
------+-------
1900 | 1
1910 | 0
1920 | 1
1930 | 3
1940 | 0
1950 | 0
1960 | 1
1970 | 0
1980 | 3
-- ...
2100 | 0
如果需要,你可以調整爲generate_series
調用的第一個和最後一個值來匹配您的數據。
floor(t.year/10) * 10
bit給你給定年的十年;它會將1942年轉換爲1940年,2000年至2000年等。
如果您將數據庫遷移到沒有類似generate_series
的數據庫,則可以設置一個十年表(每個十年一個條目) 。 SQL將幾乎相同,只需使用十進制表替換generate_series
調用即可。
謝謝,我想我現在有一個想法該怎麼做。 – steve
雖然在這種情況下這可能不相關,但值得注意的是'generate_series'也可以用於日期範圍。 – 2013-08-14 09:39:55
@PeterM:在日期中使用'generate_series'時需要注意,'generate_series'的形式實際上與'timestampz'一起使用,如果您不小心,會導致奇怪的時區問題:http:// stackoverflow。 com/a/12994322/479863 –
嘗試是這樣的(不知道你的表怎麼看,猜測):
SELECT movie_year, sum(column_x)
FROM (
SELECT year
, date_trunc('decade', movie_year)::date as decade
, column_x
FROM movies) as movies_with_decades
GROUP BY decade
ORDER BY decade;
- 1. 遍歷範圍
- 2. 遍歷Excel範圍
- 3. Perl:循環遍歷指定範圍的月份
- 4. 在列中遍歷範圍
- 5. 如何遍歷Python中指定範圍的列表中的參數?
- 6. 如何遍歷int值在特定範圍中的struts2
- 7. 如何遍歷指定列中的行?
- 8. Lua的遍歷日期範圍
- 9. 循環遍歷逐行的範圍
- 10. 更快的方式來遍歷範圍
- 11. 不能遍歷範圍內的輸入
- 12. 遍歷NodeJS中的日期範圍
- 13. 從另一個範圍遍歷範圍內的對象?
- 14. vba遍歷範圍寫入csv
- 15. 遍歷範圍向前和向後 - Python
- 16. 循環遍歷範圍,行和列
- 17. 使用Angularjs循環遍歷範圍
- 18. 使用for循環遍歷excel範圍
- 19. 循環遍歷狀態 - 範圍? ruby/rails
- 20. 角:深範圍遍歷和更新
- 21. Javascript的範圍遍歷是如何工作的?
- 22. 升壓範圍庫:依次遍歷兩個範圍
- 23. 如何遍歷bash中的十進制數範圍?
- 24. 如何遍歷Ruby中的一系列範圍?
- 25. Ruby:如何遍歷一個範圍,但以設置的增量?
- 26. 如何用JQuery中的變量遍歷範圍?
- 27. 遍歷VBA特定列的使用範圍的Excel
- 28. Puppet遍歷給定的數字範圍與每個功能
- 29. 如何遍歷數組,並在$範圍顯示它(angularjs)
- 30. 如何遍歷過濾範圍並刪除單元格
我在postgresql中做過類似的查詢。要檢查我是否保存了它。 – heldt