为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL常用排名函数

标签:
MySQL SQL Server

MySQL常用的排名函数有:ROW_NUMBER()、DENSE_RANK()、RANK()、NTILE()。

  1. ROW_NUMBER()

    ROW_NUMBER()函数用于把数据进行排序,每条数据会按照对应的条件要求排序后加上序号

    示例:

    SELECT
    	ROW_NUMBER() over ( ORDER BY stu_score DESC ) s_rank,
    	stu_name,
    	stu_number,
    	stu_score 
    FROM
    	students_score;
    

    row_number
    排序是按照分数降序排的,如图所示,即使出现分数相同,也是依次排序,序号是不会重复的。所以ROW_NUMBER()不能用于像学生成绩排名这样的排序要求。

  2. DENSE_RANK()

    DENSE_RANK()也是排名函数,对字段进行排名,和ROW_NUMBER()的区别,看示例:

    示例:

    SELECT
    	DENSE_RANK() over ( ORDER BY stu_score DESC ) s_rank,
    	stu_name,
    	stu_number,
    	stu_score 
    FROM
    	students_score;
    

    dense_rank

    如图所示DENSE_RANK()和ROW_NUMBER()排名结果都是连续的,但是当出现分数相同时,DENSE_RANK()的排名会出现相同的排名。

  3. RANK()

    RANK()也是对字段进行排名的函数。和DESNE_RANK()的区别在于,如果出现分数相同的数据时,DESNE_RANK()排名是连续的,RANK()则是跳跃的。

    示例:

    SELECT
    RANK() over ( ORDER BY stu_score DESC ) s_rank,
    stu_name,
    stu_number,
    stu_score 
    FROM
    students_score;
    

    rank

  4. NTILE()

    NTILE()函数将排序分区中的行划分为特定数量的组。从每个组分配一个从一开始的桶号。对于每一行,NTILE()函数返回一个桶号,表示行所属的组。
    语法:
    NTILE(n) OVER (
    PARTITION BY [{,…}]
    ORDER BY [ASC|DESC], [{,…}]
    )

  • n是一个字面正整数。桶号的范围是1到n。

  • 在PARTITION BY从返回的结果集划分FROM子句为分区到的NTILE()函数被应用。

  • ORDER BY子句指定将NTILE()值分配给分区中的行的顺序。

    请注意,如果分区行的数量不能被整除n,则NTILE()函数将生成两个大小的组,差异为1。较大的组总是以ORDER BY子句指定的顺序位于较小的组之前。
    另一方面,如果分区行的总数可被整除n,则行将在组之间平均分配。

示例:

SELECT
	NTILE( 2 ) over ( ORDER BY stu_score DESC ) s_rank,
	stu_name,
	stu_number,
	stu_score 
FROM
	students_score;
SELECT
	NTILE( 3 ) over ( ORDER BY stu_score DESC ) s_rank,
	stu_name,
	stu_number,
	stu_score 
FROM
	students_score;

ntile

以上就是MySQL常见的几个排名函数,生产中可以根据实际情况选择对应的函数。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消