PSQL width_bucket不返回等宽的存储桶

时间:2018-06-28 20:57:25

标签: sql histogram psql

我正在使用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 )

2 个答案:

答案 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)