partition by 函数
生活随笔
收集整理的這篇文章主要介紹了
partition by 函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
工作中用到的sql
selectt."ID",t."TITLE",t."SENDUSERID",t."SENDTIME",t."URL",t."USERID",t."TODOTYPE",t."MODELNAME",t."IMPORTANCE",t."SENDUSERNAME",t."SENDUSERDEPTNAME",t.DATAID,t.OPENFLAG,t.realuserid,t.status,t.donetime from (select m."ID",m."TITLE",m."SENDUSERID",m."SENDTIME",m."URL",m."USERID",m."TODOTYPE",m."MODELNAME",m."IMPORTANCE",m."SENDUSERNAME",m."SENDUSERDEPTNAME",m.DATAID,m.OPENFLAG,m.realuserid,m.status,m.donetime , row_number() over(partition by m.DATAID,m.status,m.realuserid order by m."SENDTIME" desc) rn from ( select a."ID",a."TITLE",a."SENDUSERID",a."SENDTIME",a."URL",a."USERID",a."TODOTYPE",a."MODELNAME",a."IMPORTANCE",a."SENDUSERNAME",a."SENDUSERDEPTNAME",a.DATAID,b.OPENFLAG,b.userid as realuserid,b.status,b.donetimefrom TD_HORIZON_Info a, TD_HORIZON_User bwhere a.id = b.TODOID) m )twhere rn=1;
--row_number() 順序排序 select row_number() over(partition by deptid order by salary) my_rank ,deptid,USERID,salary from tsaler; --rank() (跳躍排序,如果有兩個第一級別時,接下來是第三級別) select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; --dense_rank()(連續排序,如果有兩個第一級別時,接下來是第二級) select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; -------方案3解決方案 select * from (select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1; select * from (select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1;
selectt."ID",t."TITLE",t."SENDUSERID",t."SENDTIME",t."URL",t."USERID",t."TODOTYPE",t."MODELNAME",t."IMPORTANCE",t."SENDUSERNAME",t."SENDUSERDEPTNAME",t.DATAID,t.OPENFLAG,t.realuserid,t.status,t.donetime from (select m."ID",m."TITLE",m."SENDUSERID",m."SENDTIME",m."URL",m."USERID",m."TODOTYPE",m."MODELNAME",m."IMPORTANCE",m."SENDUSERNAME",m."SENDUSERDEPTNAME",m.DATAID,m.OPENFLAG,m.realuserid,m.status,m.donetime , row_number() over(partition by m.DATAID,m.status,m.realuserid order by m."SENDTIME" desc) rn from ( select a."ID",a."TITLE",a."SENDUSERID",a."SENDTIME",a."URL",a."USERID",a."TODOTYPE",a."MODELNAME",a."IMPORTANCE",a."SENDUSERNAME",a."SENDUSERDEPTNAME",a.DATAID,b.OPENFLAG,b.userid as realuserid,b.status,b.donetimefrom TD_HORIZON_Info a, TD_HORIZON_User bwhere a.id = b.TODOID) m )twhere rn=1;
?
?
Parttion?by?關鍵字是Oracle中分析性函數的一部分,它和聚合函數不同的地方在于它能夠返回一個分組中的多條記錄,聚合函數一般只有一條反映統計值的結果
??場景:查詢出每個部門工資最低的員工編號【每個部門可能有兩個最低的工資員工】--row_number() 順序排序 select row_number() over(partition by deptid order by salary) my_rank ,deptid,USERID,salary from tsaler; --rank() (跳躍排序,如果有兩個第一級別時,接下來是第三級別) select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; --dense_rank()(連續排序,如果有兩個第一級別時,接下來是第二級) select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; -------方案3解決方案 select * from (select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1; select * from (select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1;
?
轉載于:https://www.cnblogs.com/zhouyanan/p/6024072.html
總結
以上是生活随笔為你收集整理的partition by 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript闭包概念剖析
- 下一篇: 二叉树操作整理