MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)

文章目录

    • 1.row_number (连续不重复)
    • 2.rank(重复不连续)
    • 3.dense_rank(连续重复)
    • 4.ntile(分组连续)

分组后分区:partition by

SELECT * FROM(
	SELECT * ,rank() over(PARTITION BY cid ORDER BY score DESC) rk
	FROM sc) s
WHERE s.rk<=3

1.row_number (连续不重复)

row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。row_number用法实例:

select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order]

MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)_第1张图片

2.rank(重复不连续)

rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个
MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)_第2张图片

3.dense_rank(连续重复)

ense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。
MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)_第3张图片

4.ntile(分组连续)

ntile函数可以对序号进行分组处理,将有序分区中的行分发到指定数目的组中。
MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)_第4张图片
MYSQL——四种排名(1.row_number 2.rank 3.dense_rank 4.ntile)_第5张图片

你可能感兴趣的:(MYSQL)