SQL Server 中的 NTILE()函数
SQL Server 中的NTILE()函数是一个窗口函数,它将有序分区的行分配到预定义数量的大致相等的组中。它为每个组分配一个从 1 开始的 number_expression。 NTILE()函数为该行所属的组中的每一行分配一个 number_expression。
句法 :
NTILE(number_expression) OVER (
[PARTITION BY partition_expression ]
ORDER BY sort_expression [ASC | DESC]
)
详细语法参数:
- number_expression
number_expression 是行被划分成的整数。 - PARTITION BY 子句
PARTITION BY 是可选的,它将结果集的行区分为使用 NTILE()函数的分区。 - ORDER BY 子句
ORDER BY 子句定义使用 NTILE() 的每个分区中的行顺序。
当行数不能被 number_expression 整除时,NTILE()函数会产生两个大小相差 1 的组。在 OVER() 子句中的 ORDER BY 指定的顺序内,较大的组总是排在较小的组之前。此外,当所有行都可以被 number_expression 整除时,该函数在 number_expression 之间平均划分行。
例子 :
让我们创建一个名为 geeks_demo 的表:
CREATE TABLE geeks_demo (
ID INT NOT NULL );
INSERT INTO geeks_demo(ID)
VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
现在,
SELECT *
FROM geeks_demo;
ID |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
- 使用 NTILE()函数将以上行分为 3 组:
SELECT ID, NTILE (3) OVER ( ORDER BY ID ) Group_number FROM geeks_demo;
输出 :
ID Group_number 1 1 2 1 3 1 4 1 5 2 6 2 7 2 8 3 9 3 10 3 - 使用 NTILE()函数将行分成 5 个组:
SELECT ID, NTILE (3) OVER ( ORDER BY ID ) Group_number FROM geeks_demo;
输出 :
ID Group_number 1 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 9 5 10 5 - 如果有人尝试运行不带 number_expression 的 NTILE()函数:
SELECT ID, NTILE () OVER ( ORDER BY ID ) Group_number FROM geeks_demo;
输出 :
它会抛出以下错误:The function 'NTILE' takes exactly 1 argument(s).