mysql patition by--分区函数
分区函数 patition by
group by是分组函数,partition by是分区函数
partition by并没有group by的汇总功能。
partition by统计的每一条记录都存在,而group by将所有的记录汇总成一条记录(类似于distinct EmpDepartment 去重)
相同点:
group by 后的聚合函数,partion by 后的order by 都是针对一个区,组 操作。
不同点:
group by 分组,最终只能显示一个组里的一条记录
partition by 分区,能显示组里所有个体的记录,通过order by 在区内排序,窗口函数排序号, where筛选序号,最终显示一个组可有多条记录
两者用途不一样:
patition by主要用在排序函数里OVER(partition by... order by...)
窗口函数 OVER([partition by...] [order by...])两种用法
over()函数限制作用范围,单独使用表全部没有意义
中间要有partition by...或order by
一般都有:先分区然后再区中排序
OVER(partition by... order by...)
OVER(partition by... order by...)函数不能单独使用,必须跟在
加序号函数( ROW_NUMBER、DENSE_RANK、RANK、NTILE)
或 5种聚合函数(SUM、MAX、MIN、AVG、COUNT)后边。
加序号函数row_number()、rank()和dense_rank()
加序号函数 over()中必须有order by排序
row_number()
row_number() OVER([partition by...] order by...)
为一个分区中的每行记录按顺序生成一个唯一的行号(生成行号)
rank()
相同的值会生成相同的序号,并且接下来的序号是不连序的(成绩排名)
dense_rank()
相同的值会生成相同的序号,并且接下来的序号连序(用的少)
聚合函数( ) OVER ( [ partition by 字段] [order by 字段])
partition by
字段】和【order by 字段】是可选择的
posted on 2022-10-11 16:03 hzk-shzdx-university 阅读(4737) 评论(0) 编辑 收藏 举报