MySQL RANK 函数 您所在的位置:网站首页 排名rank怎么用 MySQL RANK 函数

MySQL RANK 函数

2023-04-10 22:18| 来源: 网络整理| 查看: 265

❮ 上一页 下一页 ❯ MySQL RANK 函数

简介:在本教程中,您将了解MySQL RANK()函数以及如何应用它以将排名分配给结果集的分区中的每一行。

MySQL RANK() 函数简介

RANK()函数为结果集的分区中的每一行分配一个排名。行的等级由一加上前面的等级数指定。

以下显示了RANK()函数的语法:

RANK() OVER ( PARTITION BY [{,...}] ORDER BY [ASC|DESC], [{,...}] )

在这个语法中:

首先,PARTITION BY子句将结果集划分为分区。RANK()功能在分区内执行,并在跨越分区边界时重新初始化。 其次,ORDER BY子句按一个或多个列或表达式对分区内的行进行排序。

与ROW_NUMBER()函数不同,RANK()函数并不总是返回连续的整数。

假设我们有一个样本表如下:

CREATE TABLE rankDemo ( val INT ); INSERT INTO rankDemo(val) VALUES(1),(2),(2),(3),(4),(4),(5); SELECT * FROM rankDemo; +------+ | val | +------+ | 1 | | 2 | | 2 | | 3 | | 4 | | 4 | | 5 | +------+ 7 rows in set (0.01 sec)

以下语句使用RANK()函数为rankDemo表中结果集的每一行分配一个排名:

SELECT val, RANK() OVER ( ORDER BY val ) my_rank FROM rankDemo;

这是输出:

+------+---------+ | val | my_rank | +------+---------+ | 1 | 1 | | 2 | 2 | | 2 | 2 | | 3 | 4 | | 4 | 5 | | 4 | 5 | | 5 | 7 | +------+---------+ 7 rows in set (0.02 sec)

如您所见,第二行和第三行具有相同的关系,因此它们获得相同的等级2。

第四行具有等级4,因为RANK()功能跳过等级3。

MySQL RANK() 函数示例

让我们使用sales我们在窗口函数教程中创建的表进行演示。

以下是sales表:

+----------------+-------------+--------+ | sales_employee | fiscal_year | sale | +----------------+-------------+--------+ | Alice | 2016 | 150.00 | | Alice | 2017 | 100.00 | | Alice | 2018 | 200.00 | | Bob | 2016 | 100.00 | | Bob | 2017 | 150.00 | | Bob | 2018 | 200.00 | | John | 2016 | 200.00 | | John | 2017 | 150.00 | | John | 2018 | 250.00 | +----------------+-------------+--------+ 9 rows in set (0.01 sec)

以下声明使用RANK()功能按销售额按每年的销售额排名:

SELECT sales_employee, fiscal_year, sale, RANK( ) OVER ( PARTITION BY fiscal_year ORDER BY sale DESC ) sales_rank FROM sales;

输出结果:

+----------------+-------------+--------+------------+ | sales_employee | fiscal_year | sale | sales_rank | +----------------+-------------+--------+------------+ | John | 2016 | 200.00 | 1 | | Alice | 2016 | 150.00 | 2 | | Bob | 2016 | 100.00 | 3 | | Bob | 2017 | 150.00 | 1 | | John | 2017 | 150.00 | 1 | | Alice | 2017 | 100.00 | 3 | | John | 2018 | 250.00 | 1 | | Alice | 2018 | 200.00 | 2 | | Bob | 2018 | 200.00 | 2 | +----------------+-------------+--------+------------+ 9 rows in set (0.01 sec)

在这个例子中:

首先,PARTITION BY子句按财务年度将结果集分成多个分区。 然后,ORDER BY子句按销售额按降序对销售员工进行排序。 MySQL RANK函数与CTE示例

以下语句使用RANK()函数查找每年最高的三个最高价值订单:

WITH order_values AS( SELECT orderNumber, YEAR(orderDate) order_year, quantityOrdered*priceEach AS order_value, RANK() OVER ( PARTITION BY YEAR(orderDate) ORDER BY quantityOrdered*priceEach DESC ) order_value_rank FROM orders INNER JOIN orderDetails USING (orderNumber) ) SELECT * FROM order_values WHERE order_value_rank


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有