width_bucket 不返回等宽的桶
Posted
技术标签:
【中文标题】width_bucket 不返回等宽的桶【英文标题】:width_bucket not returning buckets of equal width 【发布时间】:2018-06-28 20:57:24 【问题描述】:我正在使用 Postgres 版本 9.6.9 并尝试使用 width_bucket() 生成包含相等宽度的桶的直方图。但是,我使用的查询没有返回等宽的桶。
正如您在下面的示例中所见,存储桶中的值具有不同的宽度。例如桶 1 的最小值为 7,最大值为 18 - 宽度为 11。桶 3 的最小值为 52,最大值为 55 - 宽度为 3。
如何调整我的查询以确保每个存储桶具有相同的宽度?
数据如下所示:
value
-------
7
7
15
17
18
22
23
25
29
42
52
52
55
60
74
85
90
90
92
95
(20 行)
这是查询和生成的直方图:
WITH min_max AS (
SELECT
min(value) AS min_val,
max(value) AS max_val
FROM table
)
SELECT
min(value),
max(value),
count(*),
width_bucket(value, min_val, max_val, 5) AS bucket
FROM table, min_max
GROUP BY bucket
ORDER BY bucket;
min | max | count | bucket
-----+-----+-------+--------
7 | 23 | 7 | 1
25 | 42 | 3 | 2
52 | 55 | 3 | 3
60 | 74 | 2 | 4
85 | 92 | 4 | 5
95 | 95 | 1 | 6
( 6 rows )
【问题讨论】:
【参考方案1】:您的存储桶大小相同。您只是没有准确表示端点的数据。
例如,24 会在第一个或第二个存储桶中吗?这对于没有任何数据的范围更为显着,例如 75-83。
【讨论】:
【参考方案2】:来自https://www.oreilly.com/library/view/sql-in-a/9780596155322/re91.html
WIDTH_BUCKET( expression, min, max, buckets)
buckets 参数指定要在 min 到 max 定义的范围内创建的桶数。 min 包含在内,而 max 不包含。
不包括最大值。就这样设置
WIDTH_BUCKET( expression, min, max + 1, buckets)
【讨论】:
以上是关于width_bucket 不返回等宽的桶的主要内容,如果未能解决你的问题,请参考以下文章