Oracle聚合函數(shù)后 取其他列數(shù)據(jù)的方法——開窗函數(shù)

窗口函數(shù)與聚合函數(shù)的區(qū)別

聚合函數(shù)通常只返回聚合的結(jié)果以及聚合的關(guān)鍵字段,如果需要返回聚合的列以外的列的值,那么就需要用到開窗函數(shù)。與聚合函數(shù)不同的是,開窗函數(shù)會(huì)將聚合的結(jié)果合并到原本的結(jié)果集中


使用場(chǎng)景:例如 一個(gè)表Table1中存在 列 KEY,VALUE,DATE

KEY(學(xué)生) VALUE (成績(jī)) DATE(日期)
張三 89 2021/01/02
張三 72 2021/11/12
李四 63 2021/10/12
李四 91 2021/11/14

某個(gè)業(yè)務(wù)需要根據(jù)學(xué)生匯總,去除重復(fù)項(xiàng),只取最新日期的成績(jī)
Group BY語句:

SELECT A.KEY,A.VALUE,A.DATE FROM TABLE1 A
 (SELECT MAX(DATE),KEY FROM TABLE1 GROUP BY KEY) B
WHERE A.KEY = B.KEY AND  A.DATE = B.DATE

GROUP BY結(jié)果:

KEY(學(xué)生) VALUE (成績(jī)) DATE(日期)
張三 72 2021/11/12
李四 91 2021/11/14

使用開窗函數(shù)FIRST_VALUE取按KEY聚合后,ORDER 排序的第一項(xiàng)
FIRST_VALUE(A.VALUE)OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)

SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,VALUE,DATE FROM TABLE1 A

開窗函數(shù)結(jié)果

KEY(學(xué)生) VALUE (成績(jī)) NVALUE(最新成績(jī)) DATE(日期)
張三 89 72 2021/01/02
張三 72 72 2021/11/12
李四 63 91 2021/10/12
李四 91 91 2021/11/14

再去除重復(fù)項(xiàng),使用ROW_NUMBER(),將同一類數(shù)據(jù)記錄,再通過篩選取出最新項(xiàng)
ROW_NUMBER() OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)

SELECT * FROM (SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,ROW_NUMBER() OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS 
RWORDER ,VALUE,DATE FROM TABLE1 A) WHERE RWORDER =1

最終結(jié)果

KEY(學(xué)生) VALUE (成績(jī)) NVALUE(最新成績(jī)) DATE(日期) MM
張三 72 72 2021/11/12 1
李四 91 91 2021/11/14 1

https://blog.csdn.net/qq_41708308/article/details/89374701
https://blog.csdn.net/qq_37816503/article/details/108408875

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容