我正在使用PSQL版本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 )
答案 0 :(得分:0)
您的水桶大小相同。您只是没有可以准确表示终点的数据。
例如,第一个或第二个桶中有24个吗?对于没有任何数据的范围(例如75-83),这一点尤其明显。
答案 1 :(得分:0)
来自https://www.oreilly.com/library/view/sql-in-a/9780596155322/re91.html
WIDTH_BUCKET( expression, min, max, buckets)
buckets参数指定要创建的存储桶数,该存储桶的数量在min到max定义的范围内。最小值是包括在内的,最大值不是。
不包括最大值。这样设置
WIDTH_BUCKET( expression, min, max + 1, buckets)