绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
GaussDB 100 分析函数N篇
2020-03-05 14:05:25

NTILE

语法:

NTILE(expr) over([ partition by expr1[ ,... ] ] order by expr2[ ,...  ] [ ASC | DESC ] [NULLS FIRST | LAST])

功能:将一个有序数据集划分为若干桶(桶的数量由expr的结果决定,每个组的桶数可能不同),并为每一行分配适当的存储桶编号,编号从1开始到expr(如果expr非整数,则将该值向下取整)。

  • expr1是分组的列字段名称或者表达式,expr2是排序的列字段名称或者表达式,over内必须要有排序子句。

  • expr是存储桶的数量。

  • 如果expr的结果与一行记录相关(如ntile(f1)),则expr的值取组内条记录进行计算。

  • expr表达式限制一个参数,该参数为整数,取值范围是[1,9223372036854775807]。

  • [NULLS FIRST | LAST]请参见 ORDER BY。

  • [ ASC | DESC ]请参见•ORDER BY。

说明:

  • 不同存储通中的函数多可以相差1(记录数与桶数不能整除时,余数均匀得分配到前几个桶中)。

  • 如果记录数小于桶数,则前n(n为记录数)个桶都分配一条记录,其余桶为空。

  • expr表达式不能嵌套窗口函数,不能是子查询

示例:

将student表中数据按照班级分组,按照成绩排序分为2个等级。

--删除student表。
DROP TABLE IF EXISTS student;
--创建student表。
CREATE TABLE student
(
student_id int,
class int,
grade int
);
--新增数据。
insert into student values(1,1,90);
insert into student values(2,1,91);
insert into student values(3,1,92);
insert into student values(4,1,93);
insert into student values(1,2,94);
insert into student values(2,2,95);
insert into student values(3,2,96);
insert into student values(4,2,97);
--将student表中数据按照班级分组,按照成绩排序分为2个等级。
select student_id,class,grade, ntile(2) over(partition by class order by grade) from student;
STUDENT_ID CLASS GRADE NTILE(2) OVER(PARTITION BY CLASS ORDER BY GRADE)
------------ ------------ ------------ ------------------------------------------------
1 1 90 1
2 1 91 1
3 1 92 2
4 1 93 2
1 2 94 1
2 2 95 1
3 2 96 2
4 2 97 2

8 rows fetched.


分享好友

分享这个小栈给你的朋友们,一起进步吧。

GaussDB_数据库
创建时间:2020-01-06 16:21:44
华为GaussDB数据库小栈
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • GaussDB_数据库
    专家
戳我,来吐槽~