WIDTH_BUCKET
构建等宽直方图,其中直方图的范围被分为相同大小的区间(存储桶)。此外,低存储桶以下的值返回 0,高存储桶以上的值返回 bucket_count +1。返回整数值。
行为类型
不可变语法
WIDTH_BUCKET ( expression, hist_min, hist_max, bucket_count )
参数
expression
- 为其创建直方图的表达式。此表达式必须评估为 numeric 或 datetime 值,或可隐式转换为 numeric 或 datetime 值。如果 expression 求值结果为 NULL,则 expression 返回 NULL。
hist_min
- 一个表达式,解析为存储桶 1 的下限。必须也评估为 numeric 或 datetime 值,不能评估为 null。
hist_max
- 一个表达式,解析为存储桶 bucket_count 上限。必须也评估为 numeric 或 datetime 值,不能评估为 null。
bucket_count
- 一个表达式,解析为常数,代表存储桶的数量。此表达式始终评估为正数 INTEGER。
注意
-
WIDTH_BUCKET 将数据集分成多个等宽的存储桶。例如,Age = 0–20, 20–40, 40–60, 60–80。这称为等宽直方图。
-
使用 WIDTH_BUCKET 时,请注意最小和最大边界值。每个存储桶包含等于或大于该存储桶基准数的值,所以年龄范围 0–20、20–40 等等实际上是 0–19.99 和 20–39.999。
-
WIDTH_BUCKET 接受以下数据类型:(FLOAT 和/或 INTEGER)、(TIMESTAMP 和/或 DATE 和/或 TIMESTAMPTZ)或 (INTERVAL和/或 TIME)。
示例
下述示例返回五个可能值,有三个存储桶:0 [100以下)、1 [100–300)、2 [300–500)、3 [500–700) 和 4 [700 及以上):
SELECT product_description, product_cost, WIDTH_BUCKET(product_cost, 100, 700, 3);
下述示例针对康涅狄格州的女医生顾客,在 annual_income 列上创建包含九个存储桶的直方图。结果将存储桶编号返回到“Income”列,共分为 11 个存储桶,其中包括下溢桶和溢出桶。请注意,如果顾客的年收入高于最大值,则分配到溢出桶 10:
SELECT customer_name, annual_income, WIDTH_BUCKET (annual_income, 100000, 1000000, 9) AS "Income"
FROM public.customer_dimension WHERE customer_state='CT'
AND title='Dr.' AND customer_gender='Female' AND household_id < '1000'
ORDER BY "Income";
在下述结果集中,之所以有存储桶 0,是因为存储桶从 1 到 bucket_count
进行编号。任何低于 hist_min
给定值的,都进入存储桶 0;任何高于 hist_max
给定值的,都进入存储桶 bucket_count+1
。在这个示例中,存储桶 9 是空的,没有溢出。值 12,283 小于 100,000,因此进入下溢桶。
customer_name | annual_income | Income
--------------------+---------------+--------
Joanna A. Nguyen | 12283 | 0
Amy I. Nguyen | 109806 | 1
Juanita L. Taylor | 219002 | 2
Carla E. Brown | 240872 | 2
Kim U. Overstreet | 284011 | 2
Tiffany N. Reyes | 323213 | 3
Rebecca V. Martin | 324493 | 3
Betty . Roy | 476055 | 4
Midori B. Young | 462587 | 4
Martha T. Brown | 687810 | 6
Julie D. Miller | 616509 | 6
Julie Y. Nielson | 894910 | 8
Sarah B. Weaver | 896260 | 8
Jessica C. Nielson | 861066 | 8
(14 rows)