MySQL窗口函数 DENSE_RANK函数

1.简介

        根据指定条件将某个select查询结果分为若干个区域,然后对这些区域通过DENSE_RANK函数指定的顺序进行排序,图1加强理解。

MySQL窗口函数 DENSE_RANK函数_第1张图片

 

2.格式

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

说明:

PARTITION BY 字句将from的结果划分为多个分区。

ORDER BY 指定DENSE_RANK()函数操作的每个分区。

如果分区当中有两个或者是两个以上的列相同,则为它们分配相同的排名。

3.举例

创建表sales

create table if not exists sales(
sales_employee varchar(255) not null,
fiscal_year date not null,
sale double not null
)engine=innodb;

并且如下的数据

INSERT INTO `sales` VALUES ('Alice', '2016', '150.00');
INSERT INTO `sales` VALUES ('Alice', '2017', '100.00');
INSERT INTO `sales` VALUES ('Alice', '2018', '200.00');
INSERT INTO `sales` VALUES ('Bob', '2016', '100.00');
INSERT INTO `sales` VALUES ('Bob', '2017', '150.00');
INSERT INTO `sales` VALUES ('Bob', '2018', '200.00');
INSERT INTO `sales` VALUES ('John', '2016', '200.00');
INSERT INTO `sales` VALUES ('John', '2017', '150.00');
INSERT INTO `sales` VALUES ('John', '2018', '250.00');

现在通过分区函数DENSE_RANK()函数对按销售额对销售人员进行排名,

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

结果如下。

MySQL窗口函数 DENSE_RANK函数_第2张图片

详解:

第一步:PARTITION BY EXPRESS,会使用年度将结果划分为分区。

第二步:ORDER BY sale DESC ,会按照销售额对人员进行排序。

 参考文章:

MySQL DENSE_RANK() 函数 | 新手教程 (begtut.com)

你可能感兴趣的:(mysql,mysql)