鉴于:
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.
类似:
Oracle: how to “group by” over a range?
Get frequency distribution of a decimal range in MySQL
解决方法
generate_series
救援:
select 10 * s.d,count(t.age) from generate_series(0,10) s(d) left outer join thing t on s.d = floor(t.age / 10) group by s.d order by s.d
通过单独的查询确定generate_series的上限应该是微不足道的,我只使用10作为占位符.
这个:
generate_series(0,10) s(d)
原文地址:https://www.jb51.cc/mssql/78926.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。