分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)

转载 2018年04月17日 19:13:30

partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用。

准备测试数据:

复制代码
create table Student  --学生成绩表
(
 id int,  --主键
 Grade int, --班级
 Score int --分数
)
go

insert into Student values(1,1,88)
insert into Student values(2,1,66)
insert into Student values(3,1,75)
insert into Student values(4,2,30)
insert into Student values(5,2,70)
insert into Student values(6,2,80)
insert into Student values(7,2,60)
insert into Student values(8,3,90)
insert into Student values(9,3,70)
insert into Student values(10,3,80)
insert into Student values(11,3,80)
复制代码

一、分区函数Partition By的与row_number()的用法

1、不分班按学生成绩排名

select *,row_number() over(order by Score desc) as Sequence from Student

执行结果:

2、分班后按学生成绩排名

select *,row_number() over(partition by Grade order by Score desc) as Sequence from Student

执行结果:

3、获取每个班的前1(几)名

select * from
(
select *,row_number() over(partition by Grade order by Score desc) as Sequence from Student
)T where T.Sequence<=1

执行结果:

 

二、分区函数Partition By与排序rank()的用法

1、分班后按学生成绩排名 该语句是对分数相同的记录进行了同一排名,例如:两个80分的并列第2名,第4名就没有了

select *,rank() over(partition by Grade order by Score desc) as Sequence from Student

执行结果:

2、获取每个班的前2(几)名 该语句是对分数相同的记录进行了同一排名,例如:两个80分的并列第2名,第4名就没有了

select * from
(
select *,rank() over(partition by Grade order by Score desc) as Sequence from Student
)T where T.Sequence<=2

执行结果:

 

原文地址:https://www.cnblogs.com/linJie1930906722/p/6036053.html

深度卷积神经网络及其在语音中的基本用法

-
  • 1970年01月01日 08:00

mysql 实现row_number() over(partition by ) 分组排序功能

创建表  CREATE TABLE `a` ( `ID` INT(10) NULL DEFAULT NULL, `class` INT(10) NULL DEFAULT NULL, `...
  • Heng_Ji
  • Heng_Ji
  • 2014-09-05 14:25:07
  • 23202

hive分组排序函数-row_number() over&nbs

语法:row_number() over (partition by 字段a order by 计算项b desc ) rank –这里rank是别名partition by:类似hive的建表,分区...
  • sdauzyh
  • sdauzyh
  • 2016-09-12 18:55:16
  • 2441

SQL Server 排序函数 ROW_NUMBER和RANK 用法总结

下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库。转载请注明此文原创自CSDN TJVictor的专栏:http...
  • tjvictor
  • tjvictor
  • 2009-07-08 14:11:00
  • 15768

SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法

转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html
  • biaobiao1217
  • biaobiao1217
  • 2014-11-13 13:20:50
  • 3228

hive分组排序函数-row_number() over (partition by * order by d topN

hive分组排序函数-row_number() over (partition by * order by d 原网址:http://blog.sina.com.cn/s/blog_6676...
  • lixgjob
  • lixgjob
  • 2017-01-04 10:32:30
  • 2660

DB2中的ROW_NUMBER() OVER()函数用法

row_number() over()分组排序功能:      在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  ord...
  • TUBER727
  • TUBER727
  • 2013-10-12 14:34:26
  • 4943

hive函数--排序row_number,rank over

从学生的几门成绩中选出成绩最好的一门 1.row_number() over select student_id,class,score from ( select student_id ...
  • qq_17246605
  • qq_17246605
  • 2016-04-05 17:18:26
  • 5862

impala-1

impala-1分析函数over row_number(): select goods_price,row_number() over(order by goods_price desc) as i...
  • jiangfuofu555
  • jiangfuofu555
  • 2015-09-11 16:27:43
  • 1031

Cognos函数(十七) - 排名函数:rank

这回我们介绍下rank这个函数,
  • jolingogo
  • jolingogo
  • 2014-10-08 17:38:51
  • 2504
收藏助手
不良信息举报
您举报文章:分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
举报原因:
原因补充:

(最多只允许输入30个字)