Sql 宽度\u铲斗不返回相同宽度的铲斗

Sql 宽度\u铲斗不返回相同宽度的铲斗,sql,postgresql,histogram,Sql,Postgresql,Histogram,我正在使用Postgres版本9.6.9,并尝试使用width_bucket()生成一个直方图,其中bucket的宽度相等。然而,我使用的查询并没有返回宽度相等的桶 正如您在下面的示例中所看到的,bucket中的值具有不同的宽度。e、 g.铲斗1的最小值为7,最大值为18-宽度为11。铲斗3的最小值为52,最大值为55,宽度为3 如何调整查询以确保每个桶的宽度相同 以下是数据的样子: value ------- 7 7 15 17 18 22 23 25 29 42 52 52 55 60

我正在使用Postgres版本9.6.9,并尝试使用width_bucket()生成一个直方图,其中bucket的宽度相等。然而,我使用的查询并没有返回宽度相等的桶

正如您在下面的示例中所看到的,bucket中的值具有不同的宽度。e、 g.铲斗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 )

你的水桶大小一样。您只是没有准确表示终点的数据

例如,24是在第一个桶中还是在第二个桶中?这对于没有任何数据的范围更为显著,例如75-83。

Bucket参数指定要在min到max定义的范围内创建的Bucket数。min包含在内,而max不包含在内

最大值不包括在内。这么定

    WIDTH_BUCKET( expression, min, max + 1, buckets)
    WIDTH_BUCKET( expression, min, max + 1, buckets)