小白养成记——MySQL中的排名函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了小白养成记——MySQL中的排名函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1794字,纯文字阅读大概需要3分钟。
内容图文
1.ROW_NUMBER() 函数
依次排序,没有并列名次。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', ROW_NUMBER() OVER(ORDER BY sc.SCORE DESC) '排名' FROM Student st LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为
可以看出,尽管存在相同的成绩(98.0、91.0),但是排名并没有并列,而是按顺序依次排号。
2.RANK() 函数
有并列名次,且并列名次会占用序号,因此名次之间可能会有间隔。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', RANK() OVER(ORDER BY sc.SCORE DESC) '排名' FROM Student st LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为
可以看出,相同的成绩(98.0、91.0)的排名是相同的(并列第2名、并列第5名),且并列的名次会占用序号,因此与它下一个名次之间会有间隔。
显然这种结果是最符合实际生活中的排名的。
3.DENSE_RANK() 函数
有并列名次,但并列名次不占用序号,因此名次都是紧密相连的。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', DENSE_RANK() OVER(ORDER BY sc.SCORE DESC) '排名' FROM Student st LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为
可以看出,相同的成绩(98.0、91.0)的排名是相同的(并列第2名、并列第5名),但并列的名次并会占用序号,因此与它下一个名次之间没有间隔,所有名次都是紧密相连的。
4.NTILE() 函数
NTILE(n) 函数可以将返回的结果排序,如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', NTILE(4) OVER(ORDER BY sc.SCORE DESC) '组号' FROM Student st LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
表示将成绩按从大到小排序后,把结果分为4组。由于总记录数为8条,因此每组会有2条记录:
这样每组的记录数是均匀的。
但如果查询结果的总记录数不能被指定的要分的组的总数整数,则分得的每组中的记录数是不均匀的,如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', NTILE(3) OVER(ORDER BY sc.SCORE DESC) '组号' FROM Student st LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
由于 8 不能被 3 整除,因此得到的 3 组中每组的记录数不是完全一样的,而是按照 3、3、2 分配的,即"尽量"保证了均匀。
内容总结
以上是互联网集市为您收集整理的小白养成记——MySQL中的排名函数全部内容,希望文章能够帮你解决小白养成记——MySQL中的排名函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。