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()
是一个内置函数,它返回一个指定的值位于一些指定的桶中的位置。