gpt4 book ai didi

sql - 什么是使用 group-by 计算范围并包含 0 个计数的 SQL 频率分布查询?

转载 作者:行者123 更新时间:2023-11-29 11:17:19 25 4
gpt4 key购买 nike

给定:

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 计数之间的范围?

我发现了类似的计算范围的 stackoverflow 问题,有些是 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

最佳答案

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)

本质上生成一个名为 s 的内联表,其中包含一个列 d,其中包含从 0 到 10(含)的值。

如有必要,您可以将两个查询(一个用于确定范围,一个用于计算计数)包装到一个函数中。

关于sql - 什么是使用 group-by 计算范围并包含 0 个计数的 SQL 频率分布查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com