codecamp

OceanBase NTILE

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

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

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

语法

NTILE(expr) OVER ([query_partition_clause] order_by_clause)

参数

参数

说明

expr

只能为正常数。

OVER

使用 OVER 子句定义窗口进行计算。

返回类型

返回 NUMERIC 类型数据。

示例

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

CREATE TABLE course
(
  name VARCHAR(8),
  grade NUMBER
);
INSERT INTO course VALUES('Linda',50);
INSERT INTO course VALUES('Tan',85);
INSERT INTO course VALUES('Tom',90);
INSERT INTO course VALUES('John',95);
INSERT INTO course VALUES('Mery',55);
INSERT INTO course VALUES('Peter',60);
INSERT INTO course VALUES('Jack',65);
INSERT INTO course VALUES('Rose',70);
INSERT INTO course VALUES('Tonny',75);
INSERT INTO course VALUES('Apple',80);
COMMIT;

执行以下语句:

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

查询结果如下:

+-------+-------+------+
| NAME  | GRADE | TIL  |
+-------+-------+------+
| John  |    95 |    1 |
| Tom   |    90 |    1 |
| Tan   |    85 |    1 |
| Apple |    80 |    2 |
| Tonny |    75 |    2 |
| Rose  |    70 |    2 |
| Jack  |    65 |    3 |
| Peter |    60 |    3 |
| Mery  |    55 |    4 |
| Linda |    50 |    4 |
+-------+-------+------+
OceanBase DENSE_RANK
OceanBase PERCENT_RANK
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }