MySql教程

MySQL常用排名函数

本文主要是介绍MySQL常用排名函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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常见的几个排名函数,生产中可以根据实际情况选择对应的函数。

这篇关于MySQL常用排名函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!