MySQL DENSE_RANK函数
时间:2019-11-20 08:52:27 来源:igfitidea点击:
简介:在本教程中,您将学习MySQL DENSE_RANK()函数以及如何应用它来查找分区或结果集中的行列。
MySQL DENSE_RANK函数简介
DENSE_RANK()是一个窗口函数,可为分区或结果集中的每一行分配一个等级,而等级值之间没有任何间隔。
该行的排名从该行之前的不同排名值的数量增加了一个。
DENSE_RANK()函数的语法如下:
DENSE_RANK() OVER ( PARTITION BY <expression>[{,<expression>...}] ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )
使用以下语法:
首先,PARTITION BY子句将FROM子句产生的结果集划分为多个分区。
DENSE_RANK()函数应用于每个分区。其次,ORDER BY子句指定DENSE_RANK()函数在其上运行的每个分区中的行顺序。
如果分区中具有相同等级值的两行或更多行,则将为这些行中的每一行分配相同的等级。
与RANK()函数不同,DENSE_RANK()函数始终返回连续的秩值。
假设我们有一个表t,其中包含一些样本数据,如下所示:
CREATE TABLE t ( val INT ); INSERT INTO t(val) VALUES(1),(2),(2),(3),(4),(4),(5); SELECT * FROM t;
以下语句使用DENSE_RANK()函数为每行分配一个等级:
SELECT val, DENSE_RANK() OVER ( ORDER BY val ) my_rank FROM t;
这是输出:
MySQL DENSE_RANK()函数示例
我们将使用在窗口功能教程中创建的sales表进行演示。
以下语句使用DENSE_RANK()函数按销售额对销售员工进行排名。
SELECT sales_employee, fiscal_year, sale, DENSE_RANK() OVER (PARTITION BY fiscal_year ORDER BY sale DESC ) sales_rank FROM sales;
输出如下:
在此示例中:
首先,PARTITION BY子句使用会计年度将结果集划分为多个分区。
其次,ORDER BY子句按降序指定销售员工的订单。
第三,以ORDER BY子句指定的行顺序将DENSE_RANK()函数应用于每个分区。
在本教程中,您学习了如何使用MySQL DENSE_RANK()函数对结果集的每个分区中的行进行排名。