MySQL窗口函数 DENSE_RANK函数

1.简介

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

 

2.格式

DENSE_RANK() OVER(
PARTITION BY expression,expression...
ORDER BY <expression>[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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁静致远go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值