如果你想通过分组函数使每一组都返回多行值,那就要使用分析函数。
select id,town ,nestyle,row_number() over(partition by nestyle order by id) from tablename
row_number() over(partition by col1 order by col2)分析函数的使用:根据col1分组,分组之后根据col2排序
可以扩展:根据多个字段分组,根据多个字段排序(partition by col1,col11… order by col2,col22…)
而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)先看表内数据
select id,town,nestyle from tablename
执行语句
select id,town ,nestyle,row_number() over(partition by nestyle order by id) from tablename
查看结果
试用场景:查询各地最近发生的一件事(以地区分组,通过发生时间排序(降序desc),函数值为1的就是我们要查询的结果)一般都是将其作为一个子表来使用
这里要说明一下row_number(),rank(),dense_rank()
注意:
1.在求第一最近这种结果的时候,要考虑表中数据,因为如果同班有两个并列第一,row_number()只返回一个结果
2.rank()和dense_rank()的区别是:
–rank()是跳跃排序,有两个第二名时接下来就是第四名
–dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
常用的分析函数:
row_number() over(partition by … order by …)
rank() over(partition by … order by …)
dense_rank() over(partition by … order by …)
count() over(partition by … order by …)
max() over(partition by … order by …)
min() over(partition by … order by …)
sum() over(partition by … order by …)
avg() over(partition by … order by …)
first_value() over(partition by … order by …)
last_value() over(partition by … order by …)
lag() over(partition by … order by …)
lead() over(partition by … order by …)