日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle高级查询之OVER (PARTITION BY ..)

發布時間:2025/4/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle高级查询之OVER (PARTITION BY ..) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、rank()/dense_rank() over(partition by ...order by ...)

查詢每個部門工資最高的雇員的信息:

1. select e.ename, e.job, e.sal, e.deptno?
? from scott.emp e,?
?????? (select e.deptno, max(e.sal) sal from scott.emp e group by e.deptno) me?
?where e.deptno = me.deptno?
?? and e.sal = me.sal;?

?2. 使用 rank() over(partition by...)或dense_rank() over(partition by...)語法

select e.ename, e.job, e.sal, e.deptno?
? from (select e.ename,?
?????????????? e.job,?
?????????????? e.sal,?
?????????????? e.deptno,?
?????????????? rank() over(partition by e.deptno order by e.sal desc) rank?
????????? from scott.emp e) e?
?where e.rank = 1;

?select e.ename, e.job, e.sal, e.deptno?
? from (select e.ename,?
?????????????? e.job,?
?????????????? e.sal,?
?????????????? e.deptno,?
?????????????? dense_rank() over(partition by e.deptno order by e.sal desc) rank?
????????? from scott.emp e) e?
?where e.rank = 1;?

這里補充講解一下rank()/dense_rank() over(partition by e.deptno order by e.sal desc)語法。
over:? 在什么條件之上。
partition by e.deptno:? 按部門編號劃分(分區)。
order by e.sal desc:? 按工資從高到低排序(使用rank()/dense_rank() 時,必須要帶order by否則非法)
rank()/dense_rank():? 分級
整個語句的意思就是:在按部門劃分的基礎上,按工資從高到低對雇員進行分級,“級別”由從小到大的數字表示(最小值一定為1)。?

那么rank()和dense_rank()有什么區別呢?
rank():? 跳躍排序,如果有兩個第一級時,接下來就是第三級。
dense_rank():? 連續排序,如果有兩個第一級時,接下來仍然是第二級。

下面再列舉一些常用的方法在該語法中的應用(注:帶order by子句的方法說明在使用該方法的時候必須要帶order by):

select e.ename,?
?????? e.job,?
?????? e.sal,?
?????? e.deptno,?
?????? first_value(e.sal) over(partition by e.deptno) first_sal,?
?????? last_value(e.sal) over(partition by e.deptno) last_sal,?
?????? sum(e.sal) over(partition by e.deptno) sum_sal,?
?????? avg(e.sal) over(partition by e.deptno) avg_sal,?
?????? count(e.sal) over(partition by e.deptno) count_num,?
?????? row_number() over(partition by e.deptno order by e.sal) row_num?
? from scott.emp e;?

?


?

轉載于:https://www.cnblogs.com/changxr/p/5105972.html

總結

以上是生活随笔為你收集整理的Oracle高级查询之OVER (PARTITION BY ..)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。