MySQL中的序号开窗函数(RANK OVER)如何使用

文章介绍了MySQL8.0开始引入的开窗函数,包括RANK()、DENSE_RANK()和ROW_NUMBER(),分别展示了它们在数据排序中的不同行为:RANK()在数值相同的情况下可能导致序号不连续,DENSE_RANK()则保持序号连续,而ROW_NUMBER()始终连续排序,不受重复值影响。
摘要由CSDN通过智能技术生成

在MySQL8.0之后对于开窗函数的引用更加方便了SQL的编写

  1. 什么是开窗函数

           开窗函数也叫OLAP函数(Online Analytical Processing,联机分析处理),主要用来实时分析处理数据。MySQL之前的版本是不支持开窗函数的,从8.0版本之后开始支持开窗函数。

         2.使用开窗函数

      2.1 RANK()OVER(列名 ORDER BY 排序方式(DESC/ASC)) rank函数在使用中可以把数据进行排序,当出现排序列数值相同时进行并列排序,1-n可能出现不连续现象, 如图

数据库表

SQL语句

SELECT
	emp_name,
	salary,
	RANK() over ( ORDER BY salary DESC ) AS orderNum 
FROM
	tb_salary

 执行结果

 当出现并列的数值时,下一个排序不会1-n的顺序

        2.2 DENSE_RANK()OVER(列名 ORDER BY 排序方式(DESC/ASC))dense_rank() 使用排序时,列中出现相同数值时,会并列序号,但是不会像rank函数去出现不连续序号,dense_rank()会在下一个排序依然是1-n的顺序

SQL语句

SELECT
	emp_name,
	salary,
	DENSE_RANK() over ( ORDER BY salary DESC ) AS orderNum 
FROM
	tb_salary

 执行结果

               2.3 ROW_NUMBER() OVER()(列名 ORDER BY 排序方式(DESC/ASC))ROW_NUMBER()使用排序时不会考虑重复值的产生,会一直根据列名的数值一直排序下去

SQL语句

SELECT
	emp_name,
	salary,
	ROW_NUMBER() over ( ORDER BY salary DESC ) AS orderNum 
FROM
	tb_salary

执行结果

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL,窗口函数的使用与版本有关。在8.0版本之后,才支持使用窗口函数。窗口函数和分组(group by)的区别在于窗口函数保持原来的记录数,而group by分组统计聚合后的记录数。窗口函数具有同时具有分组和排序的功能,并且不会减少原表的行数。窗口函数的语法如下: <窗口函数> over (partition by <用于分组的列名> order by <用于排序的列名>)。 MySQL支持多种窗口函数,根据功能的不同可以分为序号函数、分布函数、前后函数、头尾函数和其他函数。其,排序开窗函数包括row_number(行号)、rank(排名)、dense_rank(密集排名)和ntile(分组排名)。聚合开窗函数可以使用sum、count、avg等聚合函数配合over子句来实现对分组的聚合操作。例如,在使用SUM函数时,可以使用over子句指定分组和排序的列名,来计算每个分组的聚合结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySql数据库高级函数—窗口函数(开窗函数)](https://blog.csdn.net/qq_39754641/article/details/130586238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MySQL开窗函数](https://blog.csdn.net/weixin_48719464/article/details/130197380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [MySQL开窗函数](https://blog.csdn.net/mr__sun__/article/details/124257213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值