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() 函数将由边界 low 和 high 组成的区间拆分为 count 个等宽桶,并对每个桶编号,从 1 开始:
- 如果操作数位于某个桶内,返回该桶的编号。
- 如果操作数小于最小边界
low, 该函数将返回0。 - 如果操作数大于等于最大边界
high, 该函数将返回count + 1。
如果任意一个参数为 NULL, WIDTH_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。它的计算步骤如下:
-
首先将范围
[2, 8)分成 3 个等宽的桶:[2, 4)- 第 1 个桶[4, 6)- 第 2 个桶[6, 8)- 第 3 个桶
注意,这里的低边界
2是包含在桶之内的,而高边界8是不包含在桶之内的。 -
计算
6落在哪个桶中。很显然,6是落在第 3 个桶[6, 8)中的。 -
因此,
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() 是一个内置函数,它返回一个指定的值位于一些指定的桶中的位置。