回答
如果你想,你没有任何电影,以及那些电影,那么你的十年可以使用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. 遍历Excel范围
- 2. 在列中遍历范围
- 3. 如何遍历Python中指定范围的列表中的参数?
- 4. 如何遍历int值在特定范围中的struts2
- 5. 循环遍历逐行的范围
- 6. 不能遍历范围内的输入
- 7. 遍历范围向前和向后 - Python
- 8. 角:深范围遍历和更新
- 9. 使用Angularjs循环遍历范围
- 10. 循环遍历范围,行和列
- 11. 升压范围库:依次遍历两个范围
- 12. 如何用JQuery中的变量遍历范围?
- 13. 如何遍历Ruby中的一系列范围?
- 14. Ruby:如何遍历一个范围,但以设置的增量?
- 15. 如何遍历数组,并在$范围显示它(angularjs)
- 16. 如何遍历过滤范围并删除单元格
- 17. 如何指定随机数的范围?
- 18. NSAttributedString指定范围?
- 19. 如何进一步指定范围?
- 20. 如何在公式中指定范围?
- 21. 如何在YAML中指定范围?
- 22. 如何给html元素指定范围
- 23. 查找指定的范围
- 24. 为什么不是我的jsangular循环遍历我的范围?
- 25. 循环遍历Excel中的一个范围中的每一行
- 26. 如何遍历Aspose.Cells中.Net的命名范围内的所有单元格?
- 27. 循环遍历范围,如果匹配复制特定单元格
- 28. 使用barplot指定范围
- 29. 指定日期范围
- 30. 只读指定范围
我在postgresql中做过类似的查询。要检查我是否保存了它。 – heldt