首页 > 其他分享 >分区函数 Partition By 与 row_number() 的用法 & 排序rank()的用法详解(获取分组(分区)中前几条记录)

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

时间:2023-10-25 10:24:37浏览次数:42  
标签:insert Sequence 中前 分区 用法 values Student into select

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

准备测试数据:

create table Student  --学生成绩表
(
 id int,  --主键
 Grade int, --班级
 Score int --分数
);

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名,第3名就没有了

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

执行结果:

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

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

 

标签:insert,Sequence,中前,分区,用法,values,Student,into,select
From: https://www.cnblogs.com/neozheng/p/17786040.html

相关文章

  • 可重入锁ReentrantLock在性能测试常见用法
    在进行Java多线程编程的过程中,始终绕不开一个问题:线程安全。一般来说,我们可以通过对一些资源加锁来实现,大多都是通过synchronized关键字实现。在做性能测试时,如果TPS或者QPS要求没有特别高,synchronized一招鲜基本也能满足大部分的需求了。对于一招鲜无法很好解决的问题,就需要......
  • Wireshark抓包工具的用法
    Wireshark是一款强大的网络分析工具,可以帮助用户深入了解网络数据包的传输过程和内容,从而进行故障排除、网络安全分析和网络性能优化等工作。本文将介绍Wireshark的基本用法和常用功能。一、安装WiresharkWireshark是一款开源软件,可在官方网站上免费下载安装。根据操作系统选择......
  • Mysql新增分区-Python版
    importdatetimeimportsysimportpandasaspdimportpymysqlimportsqlalchemy.engine.urlasengineUrlfromsqlalchemyimportcreate_engineDB_INFO={"host":"IP","port":3306,"username":"ro......
  • xpath的contains用法
    xpath('//div[contains(@class,"a")andcontains(@class,"b")]')#它会取class含有有a和b的元素xpath('//div[contains(@class,"a")orcontains(@class,"b")]')#它会取class含有a或者b满足时,或者同时满足时的元素starts-with顾名思义,匹......
  • ACL基本用法
    创建一个文件,使用getfacl命令查看ACL权限,此时显示的内容与先前使用ll命令查看到的内容相差无几。setfacl命令可以设置ACL权限,对每一个文件或目录进行更精确的权限设置,添加“-m”参数可以修改当前文件ACL权限。修改用户下的text.txt文件的读、写权限,当用ll查看文件时,权限字符位最......
  • kafka 分区概念
    消费者apikafka文档偏移量和消费位置主题被分为分区集合,分区内是完全有序的,每一个分区在任何时间只被分给订阅此主题的消费组里的一个消费者消费每一个分区的偏移量只是一个int,代表着下一个要消费的消息的偏移量因为每个分区同一时间只被一个消费组里的一个消费者消费,所以消......
  • Awk、Sed、Grep、Cut命令基本用法
    awk、sed、grep、cut是Linux中文本处理、shell开发、数据截取的利器。Sedsed(StreamEditor)是一种流式文本编辑器,常用于对文本文件进行处理和转换。下面是一些常见的sed经典用法:替换文本:sed's/old/new/g'file.txt将文件中所有的"old"替换为"new"。2.删除行:sed'/pattern/d'fil......
  • kafka分区与消费者配置
    kafka分区与消费者配置工作当中如何计算分区与消费者数量,如何最大化利用资源,防止不必要的浪费,本文将带你计算1.基本概念回顾Kafka是一个分布式流处理平台,具有高吞吐量、可扩展性和容错性。以下是一些Kafka的基本概念:消息:Kafka是一个消息传递系统,它通过生产者将消息发......
  • std::istringstream的用法
    1.概要std::istringstream是C++标准库中的一个类,它用于从字符串中提取数据,并将数据转换为不同的数据类型。它通常用于从字符串中解析数据,例如整数、浮点数等。以下是关于std::istringstream的详细用法:创建std::istringstream对象:首先,你需要创建一个std::istringstrea......
  • OS模块的用法
    OS模块的用法os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname")改变当前脚本工作目录;相当于shell下cdos.curdir返回当前目录:('.')os.pardir获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2')可生成多层递归目......