SQL中分组排序函数row_number()和group by子句连用

本文详细解析了MySQL8.0中引入的row_number()等窗口函数的使用方法及与groupby子句的配合机制,通过具体示例展示了窗口函数在数据分组排序中的独特作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL8.0中引入了row_number()等窗口函数。以row_number()为例,该函数本身的作用就是对数据进行分组排序(分组依据在over()中)。而group by子句的功能也是先将数据机分组之后再进行计算。今天主要来看看分组排序函数和group by子句连用时是如何计算的。

以下面的order_2017数据为例:

来看下面的SQL查询语句:

从代码运行结果来看,row_number()函数跳出了我们用group by语句划定的分组,它是在group by 完成计算后得到的整个数据表中使用自己的分组标准(partition by)重新划定分组后再进行编号。这个与窗口函数的执行顺序有关。查阅mysql8.0文档可以看到如下内容:

大概意思就是,窗口函数只允许在select语句与order by语句中使用,并且是在where、group by、having执行得到结果之后,在order by、limit、select distinct 执行之前运行。下面来看一段SQL查询代码:

在上述代码中,order by子句中已经可以使用row_number()函数产生的计算列rn,从侧面验证了row_number()函数在order by子句运行之前先运行。

当然,对于其他的窗口函数:rank()、dense_rank()等,也依然适用。

另外,Mysql中的窗口函数可以参考:

MySQL8.0中的窗口函数_Sun_Sherry的博客-CSDN博客_mysql 窗口函数

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值