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,存在子查询,性能可能出现问题。谨待道友支持

上一篇:记录一些React native的配置问题


下一篇:C++内部类与Java内部类都区别