Oracle WIDTH_BUCKET() 函数使用指南

Oracle WIDTH_BUCKET() 是一个内置函数,它返回一个指定的值位于一些指定的桶中的位置。

Oracle WIDTH_BUCKET() 语法

这里是 Oracle WIDTH_BUCKET() 函数的语法:

WIDTH_BUCKET(operand, low, high, count)

参数

operand

必需的。 操作数。

low

必需的。 所有的桶的最小边界(包含)。

high

必需的。 所有的桶的最大边界(不包含)。

count

必需的。 桶的数量。

所有参数都不能为 NULL,否则 Oracle 将报告一个错误。

返回值

Oracle WIDTH_BUCKET() 函数返回一个指定的值位于一些指定的桶中的位置。

Oracle WIDTH_BUCKET() 函数将由边界 lowhigh 组成的区间拆分为 count 个等宽桶,并对每个桶编号,从 1 开始:

  • 如果操作数位于某个桶内,返回该桶的编号。
  • 如果操作数小于最小边界 low, 该函数将返回 0
  • 如果操作数大于等于最大边界 high, 该函数将返回 count + 1

如果任意一个参数为 NULLWIDTH_BUCKET() 将返回 NULL

Oracle WIDTH_BUCKET() 示例

下面的示例演示了 WIDTH_BUCKET() 函数的基本用法。

SELECT
    WIDTH_BUCKET(6, 2, 8, 3)
FROM dual;
   WIDTH_BUCKET(6,2,8,3)
________________________
                       3

这里,我们看到了 WIDTH_BUCKET(6, 2, 8, 3) 返回了 3。它的计算步骤如下:

  1. 首先将范围 [2, 8) 分成 3 个等宽的桶:

    • [2, 4) - 第 1 个桶
    • [4, 6) - 第 2 个桶
    • [6, 8) - 第 3 个桶

    注意,这里的低边界 2 是包含在桶之内的,而高边界 8 是不包含在桶之内的。

  2. 计算 6 落在哪个桶中。很显然, 6 是落在第 3 个桶 [6, 8) 中的。

  3. 因此,WIDTH_BUCKET(6, 2, 8, 3) 返回了 3

我们可以更换一些其他的值已验证上面的计算是否正确。比如:

SELECT
    WIDTH_BUCKET(3, 2, 8, 3),
    WIDTH_BUCKET(5, 2, 8, 3)
FROM dual;
   WIDTH_BUCKET(3,2,8,3)    WIDTH_BUCKET(5,2,8,3)
________________________ ________________________
                       1                        2

这里,操作数 3 是落在第 1 个桶 [2, 4) 中的,操作数 5 是落在第 2 个桶 [4, 6) 中的。

我们还可以提供一个小于低边界的值,比如:

SELECT
    WIDTH_BUCKET(1, 2, 8, 3)
FROM dual;
   WIDTH_BUCKET(1,2,8,3)
________________________
                       0

这里,由于操作数 1 比低边界 2 还要小,它不属于任何一个桶,因此 WIDTH_BUCKET(1, 2, 8, 3) 返回了 0

我们还可以提供一个大于高边界的值,比如:

SELECT
    WIDTH_BUCKET(8, 2, 8, 3),
    WIDTH_BUCKET(9, 2, 8, 3)
FROM dual;
   WIDTH_BUCKET(8,2,8,3)    WIDTH_BUCKET(9,2,8,3)
________________________ ________________________
                       4                        4

这里,因为操作数不属于任何一个桶,并且大于等于高边界 8,因此它返回了 4(桶的数量加 1)。

结论

Oracle WIDTH_BUCKET() 是一个内置函数,它返回一个指定的值位于一些指定的桶中的位置。