ORACLE分析函数over(partition by...)中使用case when达到多重分组的效果
2009-12-16 17:16
495 查看
以前一直没有在partition by中使用过case when,刚才试了一下,也算是个小技巧吧。
SQL> select * from t1;
ID
----------
1
2
1
2
3
4
6 rows selected.
SQL> select t1.*,row_number() over(partition by id order by id) as rn from t1; --不加case when的时候
ID RN
---------- ----------
1 1
1 2
2 1
2 2
3 1
4 1
6 rows selected.
SQL> select t1.*,row_number() over(
2 partition by case when id=1 then 1
3 when id=2 then 2
4 else 3 end order by id) as rn from t1;
ID RN
---------- ----------
1 1 --id=1为一个分组
1 2
2 1 --id=2为一个分组
2 2
3 1 --其余的id值为一个分组
4 2
6 rows selected.
SQL> select t1.*,row_number() over(
2 partition by case when id=1 then 1
3 else 2 end order by id) as rn from t1;
ID RN
---------- ----------
1 1 --id为1的值作为一个分组
1 2
2 1 --id除了1以外的值当作一个分组
2 2
3 3
4 4
6 rows selected.
这里在case when中使用的是等于号,你也可以在case when中指定其他任何不同的条件表达式,可以达到你想要的特定的分组效果。
SQL> select * from t1;
ID
----------
1
2
1
2
3
4
6 rows selected.
SQL> select t1.*,row_number() over(partition by id order by id) as rn from t1; --不加case when的时候
ID RN
---------- ----------
1 1
1 2
2 1
2 2
3 1
4 1
6 rows selected.
SQL> select t1.*,row_number() over(
2 partition by case when id=1 then 1
3 when id=2 then 2
4 else 3 end order by id) as rn from t1;
ID RN
---------- ----------
1 1 --id=1为一个分组
1 2
2 1 --id=2为一个分组
2 2
3 1 --其余的id值为一个分组
4 2
6 rows selected.
SQL> select t1.*,row_number() over(
2 partition by case when id=1 then 1
3 else 2 end order by id) as rn from t1;
ID RN
---------- ----------
1 1 --id为1的值作为一个分组
1 2
2 1 --id除了1以外的值当作一个分组
2 2
3 3
4 4
6 rows selected.
这里在case when中使用的是等于号,你也可以在case when中指定其他任何不同的条件表达式,可以达到你想要的特定的分组效果。
相关文章推荐
- ORACLE分析函数over(partition by...)中使用case when达到多重分组的效果
- oracle分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总
- (2010-06-23)oracle分析函数row_number() over()使用
- oracle分析函数row_number() over()使用
- oracle下数据的排序分组row_number() over()--分析函数,可用于去重
- oracle分析函数row_number() over()使用
- ORACLE 的OVER(PARTITION BY... ORDER BY...)分析函数讲解
- ORACLE case when 函数的使用技巧
- Oracle分析函数中的分组排名函数用法 Rank Over partition by
- Oracle 分析函数 ---OVER(),row_number(),partition by
- oracle分析函数row_number() over()使用
- oracle分析函数row_number() over()使用
- oracle的分析函数over(Partition by...) 及开窗函数
- oracle 分析函数和开窗函数 ROW_NUMBER() OVER(PARTITION BY.....)
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
- oracle分析函数row_number() over()使用
- Oracle分析函数 OVER(PARTITION ORDER WINDOWING)(四)—— 多维度分组统计函数用法
- oracle的“over partition by”的用法,over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
- oracle分析函数row_number() over()使用