1. 程式人生 > 其它 >Oracle的根據某一列進行去重查詢

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,存在子查詢,效能可能出現問題。謹待道友支援