1.简介
根据指定条件将某个select查询结果分为若干个区域,然后对这些区域通过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;
结果如下。
详解:
第一步:PARTITION BY EXPRESS,会使用年度将结果划分为分区。
第二步:ORDER BY sale DESC ,会按照销售额对人员进行排序。
参考文章:
MySQL DENSE_RANK() 函数 | 新手教程 (begtut.com)