Oracle over函数学习
生活随笔
收集整理的這篇文章主要介紹了
Oracle over函数学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
sql over的作用及用法
RANK ( ) OVER ( [query_partition_clause] order_by_clause ) DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause )可實現(xiàn)按指定的字段進(jìn)行分組,然后按照另一個字段在分組內(nèi)進(jìn)行排序,其中PARTITION BY 為分組字段,ORDER BY 指定排序字段。over不能單獨(dú)使用,要和分析函數(shù):rank(),dense_rank(),row_number()等一起使用。其參數(shù):over(partition by columnname1 order by columnname2)。含義:按columname1指定的字段進(jìn)行分組,然后在分組的基礎(chǔ)之上按照columnname2字段在分組內(nèi)進(jìn)行排序。
例如:EMP表中,有三個個部門的記錄:DEPTNO分別為10、20和30。以下SQL就是指在部門10、20和30三個部門中按照薪水進(jìn)行排序。
select DEPTNO,SAL,rank() OVER(partition by DEPTNO order by SAL DESC) from EMP
同時需要注意rank()、dense_rank()和Row_number()的區(qū)別:
- row_number() 是沒有重復(fù)值的排序(即使兩天記錄相等也是不重復(fù)的),可以利用它來實現(xiàn)分頁???
- dense_rank() 是連續(xù)排序,兩個第二名仍然跟著第三名???
- rank() 是跳躍排序,兩個第二名下來就是第四名。
? 例如如下dense_rank和上面rank()語句結(jié)果的區(qū)別:
select DEPTNO,SAL,DENSE_RANK() OVER(partition by DEPTNO order by SAL) from EMP
對于row_number()結(jié)果如下:
select DEPTNO,SAL,row_Number() OVER(partition by DEPTNO order by SAL DESC) from EMP
同時over語句也可以和SUM()語句一起使用,不同的OVER()語句代表不同的求和方式。還以EMP表為例:
- sum(sal) over (partition by deptno order by ename) 按部門“連續(xù)”求總和
- sum(sal) over (partition by deptno) 按部門求總和
- sum(sal) over (order by deptno,ename) 不按部門“連續(xù)”求總和
- sum(sal) over () 不按部門,求所有員工總和,效果等同于sum(sal)。
select DEPTNO,SAL,SUM(SAL) OVER(partition by deptno) 部門總和,SUM(SAL) OVER(partition by deptno ORDER by SAL) 部門連續(xù)求和 from EMP
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的Oracle over函数学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Crontab命令--Linux
- 下一篇: 16. 命令模式