1 使用变量
8.0版本中标记SET外变量赋值为弃用,预计9.0版本移除。
可以使用内建函数替换。
Previous releases of MySQL made it possible to assign a value to a user variable in statements other than SET
. This functionality is supported in MySQL 8.0 for backward compatibility but is subject to removal in a future release of MySQL.
注意:变量间冲突问题。
(1) 非并列排名
1 | SELECT |
:=用于赋值,而=仅在SET或UPDATE时才是复制,其余为相等
(SELECT @cur := 0) AS r 创建变量cur用于记录当前记录排名。将变量作为表查出,以便递增。提取的表需要别名。
(2) 并列排名
1) 不连续排名
1 | SELECT |
cur记录当前排名位置,inc记录下一排名位置,pre记录上一变量值
IF() 测试第一个表达式,true时返回第二个值,false时返回第三个值
思考:可以看做SELECT字段从上到下依次取值。
2) 连续排名
1 | SELECT |
cur用于保存排名,pre用于保存变量值
rank在MySQL 8.0中是函数名,需要加引号
2 使用函数
RANK()函数实现非连续排名,使用DENSE_RANK()实现连续排名
(1) 非并列排名
1 | SELECT |
(2) 并列排名
1) 不连续排名
1 | SELECT |
2) 连续排名
1 | SELECT |
WINDOW操作和聚合操作的区别是WINDOW操作的结果还是单条记录,而聚合操作的是合并为一条记录
3 排名并取前N名
(1) 筛选
1 | # 取前两名 |
(2) 分组比较大小
1 | # 没有名次显示 |
参考资料
数据
1 | CREATE TABLE players ( |