Oracle的根據某一列進行去重查詢
阿新 • • 發佈:2021-06-16
推薦使用函式
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 by1) rn from student s left join gradetion g on s.id = g.stuId) a where a.rn = 1
經過優化的sql,存在子查詢,效能可能出現問題。謹待道友支援