0


常见的四种排名函数的用法(sql)

四个排名函数:
1.row_number
2.rank
3.dense_rank
4.ntile

1. ROW_NUMBER(排名场景推荐)
1.1 介绍

在 SQL 中,ROW_NUMBER() 是一个窗口函数,它为结果集中的每一行分配一个唯一的序号。该函数的语法如下:

ROW_NUMBER()OVER(ORDERBY column1 [, column2,...])

其中,ORDER BY 子句指定了 ROW_NUMBER() 函数排列行的顺序。如果省略 ORDER BY,则序号将按照结果集中的任意顺序进行分配。

1.2 使用场景及例子

1.2.1 排名
通过order by进行排序得到排名。

SELECT
    id,
    name,
    score,
    row_number()OVER(ORDERBY score DESC)AS ranks
FROM
    student_info

在这里插入图片描述

1.2.2 去重
可以使用 ROW_NUMBER() 函数去除重复记录。例如,在一个表中,有重复记录,想要保留每个记录的唯一编号

SELECT id, column1, column2,...FROM(SELECT*,
           ROW_NUMBER()OVER(PARTITIONBY column1, column2,...ORDERBY id)AS row_num
    FROM table_name
) subquery
WHERE row_num =1;

1.2.3 分页查询
大可不必,不建议使用。

SELECT*FROM(SELECT*,
           ROW_NUMBER()OVER(ORDERBY id)AS row_num
    FROM table_name
) subquery
WHERE row_num BETWEEN11AND20;
2. RANK
2.1 介绍

在SQL中,RANK()是一个窗口函数,用于根据指定的ORDER BY子句给结果集中的每一行分配排名值。在排序过程中,如果有多个行具有相同的排序值,则它们将被分配相同的排名值。RANK()可以在SELECT语句的SELECT子句、ORDER BY子句或OVER()子句中使用。

以下是RANK()的语法:

RANK()OVER([PARTITIONBY partition_expression,...[n]]ORDERBY sort_expression [ASC|DESC],...[n])

在这个语法中,PARTITION BY子句可选,它用于将结果集分割成不同的分区,然后对每个分区的行进行排名。如果省略PARTITION BY,则所有行将合并成一个分区,然后进行排名。
排序表达式是必需的,可以指定一个或多个表达式以排序行。SORT_EXPRESSION可以是列名称、函数、常量或表达式。

2.2 使用场景及例子

2.2.1 排名
通过order by进行排序得到排名。

SELECT
    id,
    name,
    score,
    RANK()OVER(ORDERBY score DESC)AS ranks
FROM
    student_info

在这里插入图片描述
2.2.2 分组排名

SELECT
    id,
    name,
    score,
    RANK()OVER(PARTITIONBY name
    ORDERBY score DESC)AS ranks
FROM
    student_info

在这里插入图片描述
PARTITION BY子句指定了name列作为分区表达式,ORDER BY子句按score列降序排序。

但使用RANK排名有个问题,即字段内容相同时,会得到相同名次,并且后续会跳过几个名次,如图:
在这里插入图片描述

3. DENSE_RANK
3.1 介绍

DENSE_RANK()是SQL中的一个窗口函数(window function),用于查询结果中的排名。与RANK()类似,不同之处在于DENSE_RANK()不会出现相同的排名。即使有多个值排名相同,紧随其后的排名也会按照定义进行递增。解决RANK的问题。

3.2 使用场景及例子

3.2.1 排名
通过order by进行排序得到排名。

SELECT
    id,
    name,
    score,
    DENSE_RANK()OVER(ORDERBY score DESC)AS ranks
FROM
    student_info

在这里插入图片描述

4. NTILE
4.1 介绍

NTILE函数用于将一组数据按照数量均匀地分成若干份,并给每份数据编号。常见的用途是将数据进行分组或划分。
语法:

NTILE(n)OVER(ORDERBY expr)

其中n:指定将数据分成的份数。ORDER BY expr:指定按照哪个表达式来进行排序。

4.2 使用场景及例子

4.2.1 排名
通过order by进行排序得到排名。

SELECT
    id,
    name,
    score,
    NTILE(4)OVER(ORDERBY score DESC)AS ranks
FROM
    student_info

在这里插入图片描述

标签: sql 数据库 mysql

本文转载自: https://blog.csdn.net/qq453660983/article/details/130316248
版权归原作者 猪无戒_ 所有, 如有侵权,请联系我们删除。

“常见的四种排名函数的用法(sql)”的评论:

还没有评论