mysql的分组排序在实际应用中是经常用到的
之前用pgsql的时候是有窗口函数来实现的,非常方便
row_number() over(partition by 分组字段 order by 排序字段 desc)
但是现在用的mysql版本还没到8.0,用不了窗口函数,所以就只能通过语句来实现效果
之前用过好几次但是也没有做记录,总是会忘记,遂记录一下
-- 需求是根据error_type分组然后取status最小的第一条数据
select t.* from (
select e.* from error_record e where e.status > 0 and e.error_type > 0 order by e.status limit 1000
) t group by t.error_type
引用:
什么叫窗口?
窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口;有的函数则相反,不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。
窗口函数的基本用法如下:
函数名([expr]) over子句
其中,over是关键字,用来指定函数执行的窗口范围,如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,窗口函数基于所有行进行计算;如果不为空,则支持以下四种语法来设置窗口:
partition子句:窗口按照那些字段进行分组,窗口函数在不同的分组上分别执行。
order by子句:按照哪些字段进行排序,窗口函数将按照排序后的记录顺序进行编号。可以和partition子句配合使用,也可以单独使用。
frame子句:frame是当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用。
按照功能划分,可以把MySQL支持的窗口函数分为如下几类:
1.序号函数:row_number() / rank() / dense_rank()
2.分布函数:percent_rank() / cume_dist()
3.前后函数:lag() / lead()
4.头尾函数:first_val() / last_val()
5.其他函数:nth_value() / nfile()
6.聚合函数作为窗口函数
————————————————
版权声明:本文为CSDN博主「Ch3n」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43064185/article/details/108768609
个人理解(不一定对):我觉得窗口函数就是官方封装的一些方法,类似于java的语法糖,目的是为了简化操作,优化语句
标签:窗口,函数,记录,mysql,分组,子句,排序 From: https://www.cnblogs.com/hanbinzhou/p/17104342.html