Oracle的根據某一列進行去重查詢


推薦使用函數

row_number() over(partition by k.f_id order by 1 desc) rn
//這里的partition by 后面是想要去重的字段 
//order by 必須要有,可以order by 常量用來提高性能 默認asc 
//rn 是別名 
學號 姓名 成績 性別 年齡
1 張三 97 male 27
2 李四 98 male 28
3 王二 97 male 29
4 麻子 91 male 30

如上表:上表數據是由學生表和成績表聯合查出來的一張虛表,此時需求為省去成績重復的學生(無論省去誰都可以)。實際開發中經常碰到這樣的需求

 

select s.id,s.name,g.grade,s.sex,s.age from student s left join gradetion g on s.id = g.stuId

上面sql是原始sql

select 
    a.id,
    a.name,
     a.grade,
     a.sex,
     a.age
from
    (select 
    s.id,
    s.name,
    g.grade,
    s.sex,
    s.age,
    rownum() over(partition by g.grade order by 1) rn
from 
    student s 
left join 
    gradetion g on s.id = g.stuId) a
where a.rn = 1   

經過優化的sql,存在子查詢,性能可能出現問題。謹待道友支持


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM