oracle数据库中分析函数大全,Oracle数据库的分析函数
over 連續的相加
求各部門的薪水總和和全部總和 select name, salary, emp
sum(salary) over (order by emp) 連續求和
sum(salary) over () 總和
100*round(sal/sum(sal) over(), 5) 份額
from company;
sum() = sum over() 求的是總和,
sum over (order by ) 求的是連續的和,即當前部門的結果+=上一個部門查詢的結果
over partition by 分區 select name, salary, emp
sum(salary) over (partition by emp ) 部門總和 # 同一部門總和不變
from company;
over partition by order by 分區內部連續求和 select name, salary, emp
sum(salary) over (partition by emp order by name) 部門內部薪水連續求和
sum(salary) over (partition by emp ) 部門總和 # 同一部門總和不變
from company;
row_number | rank | dense_rank 排名
row_number? 輸出結果名次不跳躍,不重復
根據部門分組,顯示每個部門的工資等級,按照升序排名 select name, salary, emp
row_number() over (partition by emp order by salary) as "排名"
from company;
rank 名次跳躍,針對和總數據條數的對應
語法同上,但是會有并列的情況,且并列的個數會占排序的一個位置
即如果有三個第一名并列,那么第二名的編號為4 select name, salary, emp
rank() over (partition by emp order by salary) as "排名"
from company;
dense_rank 名次不跳躍,針對名次對應的順序
不會產生名次的跳躍,即三個第一名,那么第二名的編號依然為2,用法同上
rollup 針對group by 再次統計,作用于局部字段
根據月份和地區分組,并統計分組的工資總和,(分組的最小單位為地區)。
月份下的不同地區會衍生出多條記錄,因此sum統計的是最小單位的分組記錄 select mouth,area,sum(salary) from company
group by mouth, area;
根據月份和地區分組,并統計分組的工資總和,以及對當前月份工資總和以及所有的匯總
匯總的依據為分組的最大單位,即順序靠前的分組依據; select mouth,area,sum(salary) from company
group by rollup(mouth, area);
cube 對 rollup 的升級,針對全部字段
除了根據 月份匯總外,還根據 地區匯總,并統計所有匯總的總和 select mouth,area,sum(salary) from company
group by cube(mouth, area);
grouping 對聚合結果沒有字段名字的 null 值 設置別名
grouping(parm),帶一個參數,參數為字段名,
如果是本身的結果就返回0,如果是聚合的結果就返回1
case ... vhen ... then ... else ... end 通用SQL條件判斷語句 select mouth,
# 如果是針對月份的統計的結果,返回為0
(case vhen ((grouping(area)=1) and (grouping(mouth)=0) then "月份小記"
# 如果是針對所有結果的總和,
vhen ((grouping(area)=1) and (grouping(mouth)=1) then "總計"
# 如果兩者都為0,那么就是針對地區的統計結果
else area
end) as area, sum(salary)
from company
group by rollup(mouth, area);
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle数据库中分析函数大全,Oracle数据库的分析函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 未能初始化appscan应用程序现在将关
- 下一篇: sql 删除最低分数_软件测试从业者:必