您当前的位置:首页 > 电脑百科 > 数据库 > 百科

SQL中常用的四个排序函数,你知道几个?

时间:2023-04-11 13:08:16  来源:微信公众号  作者:SQL数据库开发

我们在写SQL代码时,只要有排序,首先想到的肯定是ORDER BY,以至于好多小伙伴觉得排序多简单啊。

今天就给大家介绍四个你不怎么常用排序函数,他们就是SQL Server排序中经常用到的ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()这四个好兄弟。

 

我们先创建一个测试数据表Scores

WITH t AS
(SELECT 1 StuID,70 Score
UNION ALL
SELECT 2,85
UNION ALL
SELECT 3,85
UNION ALL
SELECT 4,80
UNION ALL
SELECT 5,74
)
SELECT * INTO Scores FROM t;
SELECT * FROM Scores

结果如下:

图片

 

1、ROW_NUMBER()​

定义:ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询,比如查询前10个 查询10-100个学生。 

1.1 对学生成绩排序

示例

SELECT
ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

(提示:可以左右滑动代码)

结果如下:

图片

这里RANK就是每个学生的排名后的次序, 根据Score进行DESC倒序 

 

1.2 获取第2名的成绩信息 

 
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores
) t WHERE t.RANK=2;

结果:

图片

这里用到的思想就是 分页查询的思想 在原sql外再套一层SELECTWHERE t.RANK>=1 AND t.RANK<=3 是不是就是获取前三名学生的成绩信息了。

 

 

2、RANK() 

定义:RANK()函数,顾名思义排名函数,可以对某一个字段进行排名,这里和ROW_NUMBER()有什么不一样呢?ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样。如果出现相同的,他们的排名是一样的。下面看例子:

示例

 
SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

SELECT RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

结果:

图片

上面是ROW_NUMBER()函数的结果,下面是RANK()函数的结果。

当出现两个学生成绩相同是里面出现变化。RANK()是1-1-3-4-5,而ROW_NUMBER()则还是1-2-3-4-5,这就是RANK()和ROW_NUMBER()的区别了

 

 

3、DENSE_RANK() 

定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,那它和RANK()到底有什么不同那?特别是对于有成绩相同的情况,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,一般情况下用的排名函数就是RANK() 我们看例子:

示例

 
SELECT
RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

SELECT
DENSE_RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

结果:

图片

上面是RANK()的结果,下面是DENSE_RANK()的结果

 

 

4、NTILE()​

定义:NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的'分区'一样 ,分为几个区,一个区会有多少个。  

 
SELECT NTILE(1) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

SELECT NTILE(2) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

SELECT NTILE(3) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

结果:

图片

就是将查询出来的记录根据NTILE函数里的参数进行平分分区。​



Tags:SQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
我们在写SQL代码时,只要有排序,首先想到的肯定是ORDER BY,以至于好多小伙伴觉得排序多简单啊。今天就给大家介绍四个你不怎么常用排序函数,他们就是SQL Server排序中经常用到的R...【详细内容】
2023-04-11  Tags: SQL  点击:(0)  评论:(0)  加入收藏
PostgreSQL数据库表在删除数据后磁盘空间未释放,该怎么办? 主流的压缩表工具有哪些?该如何选择?1、从空间未释放说起近期生产环境出现一张表占用size已达2T,且会定期删除记录,但...【详细内容】
2023-04-10  Tags: SQL  点击:(5)  评论:(0)  加入收藏
一、背景MySQL在生产环境中被广泛地应用,大量的应用和服务都对MySQL服务存在重要的依赖关系,可以说如果数据层的MySQL实例发生故障,在不具备可靠降级策略的背景下就会直接引发...【详细内容】
2023-04-06  Tags: SQL  点击:(6)  评论:(0)  加入收藏
MySQL 的连接层主要是由客户端和服务器之间的通信协议组成,用于在客户端和服务器之间传递数据和命令。在 MySQL 的连接层中,包含了认证协议和安全协议两种协议,主要用于处理连...【详细内容】
2023-04-06  Tags: SQL  点击:(5)  评论:(0)  加入收藏
基于SQL的数据可视化和数据挖掘是目前业内非常流行的一种数据分析方法,它可以帮助企业快速地了解和分析自身的数据,从而制定更加科学和有效的业务决策。在本文中,我将以一个实...【详细内容】
2023-04-04  Tags: SQL  点击:(10)  评论:(0)  加入收藏
前两天一大早就收到磁盘被占用满了,应用无法正常使用。 登录服务器查看到是因为事务日志导致磁盘爆满 找到原因开始清理事务日志,执行了下面语句结果没有生效日志文件还是...【详细内容】
2023-04-04  Tags: SQL  点击:(8)  评论:(0)  加入收藏
启用xp_cmdshellEXECUTE sp_configure &#39;show advanced options&#39;, 1;GORECONFIGURE;GOEXECUTE sp_configure &#39;xp_cmdshell&#39;, 1;GORECONFIGURE;GO禁用xp_cmds...【详细内容】
2023-03-31  Tags: SQL  点击:(30)  评论:(0)  加入收藏
对于没有学习过数据库的朋友,各种增删改查操作的语法很是头痛,后续多表查询中内外连接更是头懵,多表联查操作,实际就是在基础的查询语句里不同的位置跟子句进行查询,现以mysql为...【详细内容】
2023-03-30  Tags: SQL  点击:(15)  评论:(0)  加入收藏
MySQL无法启动,可能有多种原因导致,包括配置文件路径错误、配置文件中有错误、端口冲突、权限问题、MySQL 服务未安装、MySQL 二进制文件被删除或损坏、系统环境问题、系统内...【详细内容】
2023-03-30  Tags: SQL  点击:(17)  评论:(0)  加入收藏
1、为什么需要集群单台数据库服务器存在并发能力低、存在单点故障风险等局限,集群能够很好的通过多台服务器的协作,实现互为主备、高可用/故障转移、负载均衡、读写分离等特性...【详细内容】
2023-03-29  Tags: SQL  点击:(24)  评论:(0)  加入收藏
▌简易百科推荐
我们在写SQL代码时,只要有排序,首先想到的肯定是ORDER BY,以至于好多小伙伴觉得排序多简单啊。今天就给大家介绍四个你不怎么常用排序函数,他们就是SQL Server排序中经常用到的R...【详细内容】
2023-04-11  SQL数据库开发  微信公众号  Tags:SQL   点击:(0)  评论:(0)  加入收藏
PostgreSQL数据库表在删除数据后磁盘空间未释放,该怎么办? 主流的压缩表工具有哪些?该如何选择?1、从空间未释放说起近期生产环境出现一张表占用size已达2T,且会定期删除记录,但...【详细内容】
2023-04-10  数据库干货铺  环球网  Tags:PostgreSQL   点击:(5)  评论:(0)  加入收藏
基于SQL的数据可视化和数据挖掘是目前业内非常流行的一种数据分析方法,它可以帮助企业快速地了解和分析自身的数据,从而制定更加科学和有效的业务决策。在本文中,我将以一个实...【详细内容】
2023-04-04  树言树语Tree  今日头条  Tags:数据可视化   点击:(10)  评论:(0)  加入收藏
最近做项目遇到一个问题,外键关联查询,返回长度为1,但是值为 All elements are null没数据。有两张表,分别为a表有数据,b表无数据。select b.* from a as a left join b as b on...【详细内容】
2023-03-30  青木川30  今日头条  Tags:Mybatis   点击:(22)  评论:(0)  加入收藏
译者 | 布加迪审校 | 孙淑娟​远程托管数据库可以将您的数据库与本地环境隔离开来,带来诸多好处,包括数据安全性、全局可访问性、可靠性、可扩展性和资源有效性。​您是否将数...【详细内容】
2023-03-29  布加迪  51CTO  Tags:数据库   点击:(15)  评论:(0)  加入收藏
背景运维反馈说线上一个接口越来越慢,大概二三十秒才有返回。查看接口代码,定位问题出在sql查询效率上。sql意图是将多个号码最新的数据返回给前端使用。单表数据量 530万左右...【详细内容】
2023-03-28  进击的程序猿  今日头条  Tags:sql查询   点击:(6)  评论:(0)  加入收藏
一、业务背景最近遇到这样一个场景:在业务正式开始前1-2天,需要导入一批来自合作渠道的数据,在业务周期结束后,再将同一批数据导出,交付给渠道方;简单理解,就是数据的「导入」和「...【详细内容】
2023-03-28  知了一笑  今日头条  Tags:数据   点击:(13)  评论:(0)  加入收藏
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准化语言。它允许用户从数据库中检索和操作数据,以及创建、修改和删除表和其他数据库对象。在本篇文章中,我们...【详细内容】
2023-03-28  树言树语Tree  今日头条  Tags:SQL   点击:(13)  评论:(0)  加入收藏
TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP...【详细内容】
2023-03-28  码猿技术专栏  微信公众号  Tags:TiDB   点击:(15)  评论:(0)  加入收藏
自上世纪 70 年代起,关系数据库已走过半个世纪,如今成为社会的信息基础设施。随着时代、应用、场景的不断变更,给今天的数据库提出了更多要求,如敏捷伸缩、实时分析、降本增效等...【详细内容】
2023-03-28    CSDN  Tags:数据库   点击:(11)  评论:(0)  加入收藏
站内最新
站内热门
站内头条