oracle需求分析,8-oracle_分析函数(二)
1): Lead(),Lag()
其實(shí)這2個(gè)函數(shù)的作用非常好理解,Lead()就是取當(dāng)前順序的下一條記錄,相對(duì)Lag()就是取當(dāng)前順序的上一行記錄。
經(jīng)常會(huì)有判斷在一定條件下的兩條記錄之間的時(shí)間差、或者數(shù)值差這樣的需求。
比如有一個(gè)員工號(hào)+部門+銷售金額的表結(jié)構(gòu),現(xiàn)在求出每個(gè)部門的后一名與前一名的銷售金額差,每個(gè)部門的第一個(gè)差異為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):第一個(gè)參數(shù)表示取的數(shù)(示例取的:sales_amt),第二個(gè)參數(shù)表示兩條記錄相隔的間距,1表示上下兩條(第2行的lag_amt取第一行的sales_amt,第3條取第2行的sales_amt),2表示第1條和第3條記錄,第三個(gè)參數(shù)表示第一行時(shí)找不到上面一條記錄則顯示的數(shù)(所以003用戶的lag_amt顯示的是自己金額6734)。
理解了lag()函數(shù)后對(duì)lead()函數(shù)的理解就容易了,就是第一條記錄取第二條錄的sales_amt信息,取后一條則取自己的sales_amt信息
2): sum() over(partition by)
此函數(shù)功能用于按分區(qū)求和,與group by不同的是,他可以帶出一些非group by字段的信息,對(duì)于一些求占比的需求很方便。
比如我們需要計(jì)算每個(gè)員工的銷售金額占部門總銷售金額的比率
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表示按什么分區(qū)求和匯總。
3): max() over(partition by), min() over(partition by)等都是按分區(qū)求最大值和最小值。各位可以按需求套用相關(guān)的分析函數(shù)。
更多技術(shù)文章請關(guān)注公眾號(hào):BLT328
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的oracle需求分析,8-oracle_分析函数(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元宇宙后又一热点?华为:在ChatGPT
- 下一篇: php 段落加上标签,php – 如何