mysql排序-四⼤函数(row_number、rank、dense_rank、
ntile)
row_number、rank、dense_rank、ntile——mysql排序
row_number在排名时序号 连续 不重复,即使遇到表中的两个2时亦如此。
SELECT e.stuno AS 学号,(SELECT s.stuname FROM stuinfo s WHERE s.stuno IN (e.stuno)) AS 姓名,(e.wscores+e.cscores) AS 总分,row_number() OVER(ORDER BY (e.wscores+e.cscores) DESC) AS 排名 FROM exams e;
注意:在使⽤row_number实现分页时需要特别注意,over⼦句中的order by要与Sql排序记录中的order by 保持⼀致,否则得到的序号可能不是连续的。
2.rank 叠加、跳动排序
rank函数会把要求排序的值相同的归为⼀组且每组序号⼀样,排序不会连续。
SELECT e.stuno AS 学号,(SELECT s.stuname FROM stuinfo s WHERE s.stuno IN (e.stuno)) AS 姓名,(e.wscores+e.cscores) AS 总分,rank() OVER(ORDER BY (e.wscores+e.cscores) DESC) AS 排名 FROM exams e;
3.dense_rank 叠加、依次排序
dense_rank排序是连续的,也会把相同的值分为⼀组且每组排序号⼀样。
SELECT e.stuno AS 学号,(SELECT s.stuname FROM stuinfo s WHERE s.stuno IN (e.stuno)) AS 姓名,(e.wscores+e.cscores) AS 总分,dense_rank() OVER(ORDER BY (e.wscores+e.cscores) DESC) AS 排名 FROM exams e;
NTILE(group_num)将所有记录分成group_num个组,每组序号⼀样。
SELECT e.stuno AS 学号,(SELECT s.stuname FROM stuinfo s WHERE s.stuno IN (e.stuno)) AS 姓名,(e.wscores+e.cscores) AS 总分,NTILE(2) OVER(ORDER BY (e.wscores+e.cscores) DESC) AS 排名 FROM exams e;
rank函数的用法
如果需要分成3组,只要将“NTILE(2)”中2改成3.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论