oracle需求分析,8-oracle_分析函数(二)
1): Lead(),Lag()
其實這2個函數的作用非常好理解,Lead()就是取當前順序的下一條記錄,相對Lag()就是取當前順序的上一行記錄。
經常會有判斷在一定條件下的兩條記錄之間的時間差、或者數值差這樣的需求。
比如有一個員工號+部門+銷售金額的表結構,現在求出每個部門的后一名與前一名的銷售金額差,每個部門的第一個差異為0
select
user_no,
dept_code,
sales_amt,
lag
(sales_amt,
1
, sales_amt)
over
(
partition
by
dept_code
order
by
sales_amt
desc
) lag_amt,
--
上一條金額
lag
(sales_amt,
1
, sales_amt)
over
(
partition
by
dept_code
order
by
sales_amt
desc
) - sales_amt diff_amt
--
差異金額
from
t_sales;
lag(sales_amt, 1, sales_amt):第一個參數表示取的數(示例取的:sales_amt),第二個參數表示兩條記錄相隔的間距,1表示上下兩條(第2行的lag_amt取第一行的sales_amt,第3條取第2行的sales_amt),2表示第1條和第3條記錄,第三個參數表示第一行時找不到上面一條記錄則顯示的數(所以003用戶的lag_amt顯示的是自己金額6734)。
理解了lag()函數后對lead()函數的理解就容易了,就是第一條記錄取第二條錄的sales_amt信息,取后一條則取自己的sales_amt信息
2): sum() over(partition by)
此函數功能用于按分區求和,與group by不同的是,他可以帶出一些非group by字段的信息,對于一些求占比的需求很方便。
比如我們需要計算每個員工的銷售金額占部門總銷售金額的比率
select
user_no,
dept_code,
sales_amt,
sum
(sales_amt)
over
(
partition
by
dept_code) dept_all_amt,
--
部門總金額
sales_amt /
sum
(sales_amt)
over
(
partition
by
dept_code) amt_rt
--
員工占部門金額比率
from
t_sales;
sum(sales_amt) over(partition by dept_code):sum()表示求和的字段,partition by表示按什么分區求和匯總。
3): max() over(partition by), min() over(partition by)等都是按分區求最大值和最小值。各位可以按需求套用相關的分析函數。
更多技術文章請關注公眾號:BLT328
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle需求分析,8-oracle_分析函数(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元宇宙后又一热点?华为:在ChatGPT
- 下一篇: c 写c语言代码编辑器,最好用的c/cp