全部产品

NTILE

更新时间:2020-03-23 20:04:45

NTILE 函数将有序数据集划分为 expr 指示的若干桶,并为每一行分配适当的桶号。桶编号为 1 到 expr。 对于每个分区,expr 值必须解析为正常数。如果 expr 是一个非整数常量,则 OceanBase 将该值截断为整数。 返回值为 NUMBER

桶中的行数最多可以相差 1,其余值(行数的其余部分除以桶)为每个桶分配一个,从桶 1 开始。如果 expr 大于行数,则将填充与行数相等的多个桶,其余的桶将为空。

您不能通过使用 NTILE 或任何其他分析函数来嵌套分析函数。 但是您可以将其他内置函数表达式用在 expr 中。

语法

  1. NTILE(expr) OVER ([query_partition_clause] order_by_clause)

作为分析函数使用,您需要使用窗口函数的完整语法,它对一组行的集合进行计算并返回多个值,具体信息请查阅文档 OVER (analytic_clause)

参数

参数 说明
expr 只能为正常数。
OVER 使用 OVER 子句定义窗口进行计算。

返回类型

返回 NUMBERFLOATBINARY_FLOATBINARY_DOUBLE 数值类型。

示例

根据成绩将同学分成四个等级,为学生评奖。创建表 course,并向里面插入数据,执行以下语句:

  1. CREATE TABLE course
  2. (
  3. name VARCHAR(8),
  4. grade NUMBER
  5. );
  6. INSERT INTO course VALUES('Linda',50);
  7. INSERT INTO course VALUES('Tan',85);
  8. INSERT INTO course VALUES('Tom',90);
  9. INSERT INTO course VALUES('John',95);
  10. INSERT INTO course VALUES('Mery',55);
  11. INSERT INTO course VALUES('Peter',60);
  12. INSERT INTO course VALUES('Jack',65);
  13. INSERT INTO course VALUES('Rose',70);
  14. INSERT INTO course VALUES('Tonny',75);
  15. INSERT INTO course VALUES('Apple',80);
  16. COMMIT;

执行以下语句:

  1. SELECT name, grade, ntile(4) OVER (ORDER BY grade DESC) til FROM course;

查询结果如下:

  1. +-------+-------+------+
  2. | NAME | GRADE | TIL |
  3. +-------+-------+------+
  4. | John | 95 | 1 |
  5. | Tom | 90 | 1 |
  6. | Tan | 85 | 1 |
  7. | Apple | 80 | 2 |
  8. | Tonny | 75 | 2 |
  9. | Rose | 70 | 2 |
  10. | Jack | 65 | 3 |
  11. | Peter | 60 | 3 |
  12. | Mery | 55 | 4 |
  13. | Linda | 50 | 4 |
  14. +-------+-------+------+