select type,qty from test;
--------
1 3
1 5
2 7
2 9
3 4
3 6
3 8
select type,qty,to_char(row_number() over(partition by type order by qty))||'/'||to_char(count(*) over(partition by type)) as cnt2 from test
----------------
1 3 1/2
1 5 2/2
2 7 1/2
2 9 2/2
3 4 1/3
3 6 2/3
3 8 3/3
关于partition by
这些都是分析函数,好像是8.0以后才有的 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序) rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 lag(arg1,arg2,arg3): arg1是从其他行返回的表达式 arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。 arg3是在arg2表示的数目超出了分组的范围时返回的值。
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 ...)
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 ...)
row_number() over(partition by ... order by ...)
最新推荐文章于 2021-10-26 23:51:07 发布
本文深入探讨了SQL中的分析函数,包括row_number(), rank(), dense_rank()等,详细解释了这些函数如何在不同分组内进行排序及计算,并通过具体示例展示了其应用。
379

被折叠的 条评论
为什么被折叠?



