序列函数

row_number:会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5。

rank:会对相同数值,输出相同的序号,而且下一个序号间断,如:1、1、3、3、5。

dense_rank:会对相同数值,输出相同的序号,但下一个序号不间断,如:1、1、2、2、3。

1.ROW_NUMBER()

row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。

-- rn_id 按照性别分组,按照id排序
select sex,name,id,
row_number() over(partition by sex order by id desc) as rn_id
from student_grouping;

-- 运行结果
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.07 sec HDFS Read: 9758 HDFS Write: 298 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 70 msec
OK

boy     name6   6       1
boy     name5   5       2
boy     name4   4       3
boy     name2   2       4
boy     name1   1       5
girl    name8   8       1
girl    name7   7       2
girl    name3   3       3

一个查询语句,有两个row_number(),并且两个分组一样,但排序不一样,查询出来的数据会跟着哪个走?

-- rn_id 按照性别分组,按照id排序
-- rn_age 按照性别分组,按照age 排序
select sex,name,id,age,
row_number() over(partition by sex order by id desc) as rn_id,
row_number() over(partition by sex  order by age desc) as rn_age
from student_grouping;

查询结果:

2.RANK()、dense_rank()

row_number:会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5。

rank:会对相同数值,输出相同的序号,而且下一个序号间断,如:1、1、3、3、5。

dense_rank:会对相同数值,输出相同的序号,但下一个序号不间断,如:1、1、2、2、3。

示例:

三个函数的结果比对

select sex,name,id,age,
rank() over(partition by sex order by age desc) as rk1,
dense_rank() over(partition by sex  order by age desc) as rk2,
row_number() over(partition by sex order by age desc) as rn1
from student_grouping;

查询结果

原文地址:https://www.cnblogs.com/zhuziz/p/12382192.html

时间: 2024-10-11 13:12:35

序列函数的相关文章

[题解]BZOJ1004 序列函数

原题找不到了,应该是usaco之类的题目吧.给一个可以交题的链接:http://www.cqoi.net:2012/problem.php?id=1004 思路:将素数一个一个往里乘,保证扫描的顺序是从小到大的就可以了.思路跟usaco training的丑数有点像,算是那道题的简单版吧. 我的实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstri

r语言之生成规则序列,规则序列函数及用法

在生成序列时,“:”的优先级最高 (1)从1到20的整数序列: > 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (2)用函数seq生成实数等差序列:(两种表示方法) seq(start,end,d)     start表示起点,end表示终点,d表示步长. > seq(1,20,2) [1] 1 3 5 7 9 11 13 15 17 19> seq(1,20,3)[1] 1 4 7 10 13 16 19 &g

个人永久性免费-Excel催化剂功能第36波-新增序列函数用于生成规律性的循环重复或间隔序列

啃过Excel函数的表哥表姐们,一定对函数的嵌套.数组公式等高级的应用有很深的体会,威力是大,但也烧死不少脑细胞,不少人就在这样的绕函数中光荣地牺牲了,走向从入门到放弃.Excel催化剂的创立,初衷就是为了让普通用户,借助类似化学催化剂的作用,让平常难以有反应的常规使用,能够瞬间被点燃,借力完成过去很难完成的事情.此篇给大家介绍一些过往用函数潜逃较为复杂完成的事情,如今仅通过简单的一个自定义函数即可完成. 文章出处说明 原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有

PostgreSQL学习手册(五) 函数和操作符

PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:    常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:    下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < 小于 > 大于 <= 小于或等于 >= 大于或等于 = 等于 != 不等于 比较操作符可以用于所有可以比较的数据类型.所有比较操作符都是双目操作符,且返回boolean类型.除了比较操作符以外,我们还可以使用BETWEEN语句,如

Python函数(2)

返回值 即使hello()函数没有return语句但是它仍然有返回值none python的返回值可以是多个,即返回一个序列 函数变量的作用域 在子程序中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序(包括子程序内部),局部变量作用域是定义该变量的子程序. 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用:在其它地方全局变量起作用.

学习Python函数笔记之二

---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返回的结果就是x/y的商和模,显示y不能等于0,等于0就会报错 5.内置函数:pow(a,b)两个参数的情况下,表示a的b次幂 pow(x,y,z)三个参数的情况下,表示x的y次幂的值,然后再对z取模得出结果 6.内置函数:round(x,y)表示x是一个浮点型的小数,y表示保留几位小数,最后输出保留

内置函数的基本作用介绍

python中内置了很多的函数,现大致说下这些内置函数的作用: 函数(运算相关) 例子 作用说明                abs() abs(-1)/abs(1) 取绝对值 max() max([1,2,3])  取最大值 len() len('abc')/len([1,2,3])/len((1,2,3,))  序列长度 divmod() divmod(5,2)  取模  pow() pow(2,3,4)  相乘 round() round(1)  浮点数  函数()      calla

[转] PostgreSQL学习手册(函数和操作符)

一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < 小于 > 大于 <= 小于或等于 >= 大于或等于 = 等于 != 不等于 比较操作符可以用于所有可以比较的数据类型.所有比较操作符都是双目操作符,且返回boolean类型.除了比较操作符以外,我们还可以使用BETWEEN语句,如:    a BETWEEN x AND y 等效于 a &g

Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK

继续介绍几个序列函数: NTILE.ROW_NUMBER,RANK和DENSE_RANK 环境信息:Hive版本号为apache-hive-0.14.0-binHadoop版本号为hadoop-2.6.0Tez版本号为tez-0.7.0 数据: P088888888888,2016-02-10,1 P088888888888,2016-02-11,3 P088888888888,2016-02-12,1 P088888888888,2016-02-13,9 P088888888888,2016-