hzk20220818

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排序
image

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编辑  收藏  举报

导航