标签:name grade 查询 order 一列 Oracle rn male id
推荐使用函数
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,存在子查询,性能可能出现问题。谨待道友支持
标签:name,grade,查询,order,一列,Oracle,rn,male,id 来源: https://www.cnblogs.com/Theozhu/p/14888268.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。