📜  SQL Server 中的 NTILE()函数

📅  最后修改于: 2022-05-13 01:55:47.209000             🧑  作者: Mango

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
  1. 使用 NTILE()函数将以上行分为 3 组:
    SELECT ID,
    NTILE (3) OVER (
    ORDER BY ID
    ) Group_number
    FROM geeks_demo; 

    输出 :

    IDGroup_number
    11
    21
    31
    41
    52
    62
    72
    83
    93
    103
  2. 使用 NTILE()函数将行分成 5 个组:
    SELECT ID,
    NTILE (3) OVER (
    ORDER BY ID
    ) Group_number
    
    FROM geeks_demo; 

    输出 :

    IDGroup_number
    11
    21
    32
    42
    53
    63
    74
    84
    95
    105
  3. 如果有人尝试运行不带 number_expression 的 NTILE()函数:
    SELECT ID,
    NTILE () OVER (
    ORDER BY ID
    ) Group_number
    
    FROM geeks_demo; 

    输出 :
    它会抛出以下错误:

    The function 'NTILE' takes exactly 1 argument(s).