Oracle 高级排序函数 和 高级分组函数
高级排序函数:
[ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx)
1.row_number() 连续且递增的数字 1 2 3 4
row_number() over (partition by xx order by xx )
--学生表中按照所在专业分组,同专业内按成绩倒序排序,成绩相同则按学号正序排序,并给予组内等级
select row_number() over(partition by class_id order by score desc)rn,t.* from student2016 t
2.rank() 跳跃排序 若有相同数据则排名相同 然后跳跃排序 1 2 2 2 5
rank() over (partition by xx order by xx )
select rank() over(partition by class_id order by score desc)rn,t.* from student2016 t
3.dense_rank 若有相同数据则排名相同 然后递增排序
dense_rank over (partition by xx order by xx ) 1 2 2 2 3
select dense_rank() over(partition by class_id order by score desc)rn,t.* from student2016 t
----------------------------------------------------------------------------------------------------------------------------
高级分组函数
group by rollup(a,b,c)
select a,b,c,sum(d) from test group by rollup(a,b,c)
对rollup后面的列 按从右到左以少一列的方式进行分组直到所有列都去掉后的分组(也就是全表分组)
对于n个参数的 rollup,有n+1次分组
即按a,b,c,分组,union all a,b分组 union all a分组 union from test
----------------------------------------------------------------------------------
group by cube(a,b,c)
对n个参数,有2^n次分组
即按 ab,ac,a,bc,b,c最后对 全部分组
----------------------------------------------------------------------------------
group by grouping sets(a,b)
即只列出 对 a分组后,和对 b分组的结果集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | -- 创建销售表 create table sales_tab( year_id number not null , month_id number not null , day_id number not null , sales_value number(10,2) not null ); -- 插入数据 insert into sales_tab select trunc(dbms_random.value(low=>2010,high=>2012)) as year_id, trunc(dbms_random.value(low=>1,high=>13)) as month_id, trunc(dbms_random.value(low=>1,high=>32)) as day_id, round(dbms_random.value(low=>1,high=>100)) as sales_value from dual connect by level <=1000; -- 查询 group by 后的数据 select sum (t.sales_value) from SALES_TAB t -- 1行 select t.year_id,t.month_id,t.day_id, sum (t.sales_value) sales from SALES_TAB t group by t.year_id,t.month_id,t.day_id order by t.year_id,t.month_id,t.day_id desc ; -- 540行 select t.year_id,t.month_id, sum (t.sales_value) sales from SALES_TAB t group by t.year_id,t.month_id order by t.year_id,t.month_id desc ; -- 24 行 select t.year_id, sum (t.sales_value) sales from SALES_TAB t group by t.year_id order by t.year_id desc ; -- 2 行 -- 使用高级分组函数 -- group by rollup(a,b,c) select t.year_id,t.month_id,t.day_id, sum (t.sales_value) sales from SALES_TAB t group by rollup (t.year_id,t.month_id,t.day_id) order by t.year_id,t.month_id,t.day_id; -- 567 行 = 同上面 1+540+24+2 -- group by cube(a,b,c) select t.year_id,t.month_id,t.day_id, sum (t.sales_value) sales from SALES_TAB t group by cube (t.year_id,t.month_id,t.day_id) order by t.year_id,t.month_id,t.day_id; --group by grouping sets(a,b,c) select t.year_id,t.month_id, sum (t.sales_value) sales from SALES_TAB t group by cube (t.year_id,t.month_id) order by 1,2; -- 39 行 select t.year_id,t.month_id, sum (t.sales_value) sales from SALES_TAB t group by grouping sets(t.year_id,t.month_id) order by 1,2; -- 14 行 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?