首页 > 其他分享 >分区函数Partition By的用法

分区函数Partition By的用法

时间:2023-08-08 22:45:47浏览次数:34  
标签:over partition 分区 Partition 语文 rank 用法 分组 order

原文地址:https://blog.csdn.net/locken123/article/details/127411319

前言:
partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录。
partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。
partition by与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。

常用的函数:
row_number() over(partition by … order by …)
rank() over(partition by … order by …)
dense_rank() over(partition by … order by …)
count() over(partition by … order by …) 求分组后的总数
max() over(partition by … order by …) 求分组后的最大值
min() over(partition by … order by …) 求分组后的最小值
sum() over(partition by … order by …) 求分组后的总和
avg() over(partition by … order by …) 求分组后的平均值
first_value() over(partition by … order by …) 求分组后的第一个值
last_value() over(partition by … order by …) 求分组后的最后一个值
lag() over(partition by … order by …) 取出分组后前n行数据
lead() over(partition by … order by …) 取出分组后后n行数据
一、rank()
rank() over(partition by A order by B)
是按照A进行分组,分组里面的数据按照B进行排序,over即在什么之上,rank()即跳跃排序(比如存在两个第一名,接下来就是第三名) 举例:

select 课程, 学生ID, 分数, rank() over (partition by 课程 order by 分数 desc) as 排名 from 成绩表
查询结果:
课程 学生ID 分数 排名
语文 1 99 1
语文 5 99 1
语文 7 89 3
语文 9 79 4

1
2
3
4
5
6
7
8
二、row_number()
row_number() over(partition by A order by B)
row_number(): 如果有两个第一名时,只返回一个结果。 举例:

select 课程, 学生ID, 分数, row_number() over (partition by 课程 order by 分数 desc) as 排名 from 成绩表
查询结果:

课程 学生ID 分数 排名
语文 1 99 1
语文 5 99 2
语文 7 89 3
语文 9 79 4
1
2
3
4
5
6
7
8
三、dense_rank()
dense_rank() over(partition by A order by B)
dense_rank(): 连续排序(如果有两个第一名时,接下来仍然是第二名) 举例:

select 课程, 学生ID, 分数, rank() over (partition by 课程 order by 分数 desc) as 排名 from 成绩表
查询结果:

课程 学生ID 分数 排名
语文 1 99 1
语文 5 99 1
语文 7 89 2
语文 9 79 3
1
2
3
4
5
6
7
8
其他用法,就不一一列举了,和上面用法类似,请看开头的简介~
以上~~
————————————————
版权声明:本文为CSDN博主「惊寂123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/locken123/article/details/127411319

标签:over,partition,分区,Partition,语文,rank,用法,分组,order
From: https://www.cnblogs.com/eyesfree/p/17615570.html

相关文章

  • springbatch remote partition
    SpringBatch远程分区demo*使用框架版本<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.han</groupId> <......
  • Android之Spinner用法,key/value模式
    参考:http://www.dedeyun.com/it/m/98498.htmlhttps://blog.csdn.net/myxiaoq/article/details/258696931.key、value类,需要重写toString()方法,返回text就是Spinner要显示的keypackagecom.jay.common;publicclassSpinnerData{privateStringvalue="";private......
  • 香橙派上的eMMC分区
    准备工作OrangePiPlus2E(自带16G的eMMC存储,出厂默认eMMC中附带了Android系统,用于测试板子功能)Ubuntu16.04的TF卡第一张方式:该方式可以按需删除指定分区。查看分区将安装了Ubuntu系统的TF卡插入OrangePi,上电启动系统,默认从TF卡启动,进入Ubuntu系统后,查看eMMC名称:ls/dev/mm......
  • Android Service生命周期及用法!(转)
    AndroidService生命周期及用法!大家好,上一节我讲解了AndroidActivity的生命周期,这一节我将讲解一下Service,首先我们要知道Service具体是干什么的,什么时候用到?以及它的生命周期等。Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在......
  • VMware虚拟机添加新硬盘以及对磁盘进行分区挂载
    有时候我们需要在VMware中添加新的虚拟磁盘。比如原来已经有sda盘,现在我们需要新的空白sdb盘。方法如下:VMware新增磁盘的设置步骤(建议:在设置虚拟的时候,不要运行虚拟机的系统,不然添加了新的虚拟磁盘则要重启虚拟机)1、选择“VM”—-“设置”并打开,将光标定位在硬盘这一选项,然后......
  • hadoop案例(一)--hive--2T数据动态创建分区
    我们在使用hadoop集群过程中,发现网上很少有具体的数据使用分析案例,也就是说我们不知道多少个节点处理多少大小的数据量耗费多少时间是合理的哪些是需要优化的。为了增加这方面的相关经验,我们会记录一下实际的使用案例。以供大家参考。配置如图:耗费时间如图:执行语句sethive.exe......
  • web开发----jsp中通用模版的引用 include的用法
    web开发中常常会有一些代码需要多个页面使用,比如banner nav导航 还有footer等.ASP.NET开发中有母版页的说法,也就是写一些通用的模版页,然后其他页面可以引用。 jsp中 当然也有这样的用法 也就是include的用法 两种用法一种是说明标签<%@include file="xxx.jsp"%>,......
  • uniapp vuex用法详细讲解
    uni-app小程序项目三1.商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2.商品详情、轮播图、商品价格闪烁问题3.加入购物车、vuex、持久化存储、mixiins_小程序商品列表加载_Hyman-ya的博客-CSDN博客......
  • perl字符串转义以及字符串含.号等特殊符号时的用法
    Perl中的单引号字符串不支持转义字符,双引号字符串支持转义字符如下双引号中的\t \x \r \n是有作用的 单引号中的无作用$cattest_stresc.pl#!/usr/bin/perlusewarnings;usestrict;my$str_sq='1Aa\t\x31\x41\x61\t\x{263a}\r\n';my$str_dq="1Aa\t\x31\x41\x......
  • Oracle 清理sysaux表空间-清理AWR分区数据
    ----0、表空间使用率colTABLESPACE_NAMEfora20;colPCT_FREEfora10;colPCT_USEDfora10;setlines200;SelectTablespace_Name,Sum_m,Max_m,Count_BlocksFree_Blk_Cnt,Sum_Free_m,To_Char(100*Sum_Free_m/Sum_m,'99.9999')||'%'AsPct_Free,100......