在MySQL8.0之后对于开窗函数的引用更加方便了SQL的编写
- 什么是开窗函数
开窗函数也叫OLAP函数(Online Analytical Processing,联机分析处理),主要用来实时分析处理数据。MySQL之前的版本是不支持开窗函数的,从8.0版本之后开始支持开窗函数。
2.使用开窗函数
2.1 RANK()OVER(列名 ORDER BY 排序方式(DESC/ASC)) rank函数在使用中可以把数据进行排序,当出现排序列数值相同时进行并列排序,1-n可能出现不连续现象, 如图
数据库表
SQL语句
SELECT
emp_name,
salary,
RANK() over ( ORDER BY salary DESC ) AS orderNum
FROM
tb_salary
执行结果
当出现并列的数值时,下一个排序不会1-n的顺序
2.2 DENSE_RANK()OVER(列名 ORDER BY 排序方式(DESC/ASC))dense_rank() 使用排序时,列中出现相同数值时,会并列序号,但是不会像rank函数去出现不连续序号,dense_rank()会在下一个排序依然是1-n的顺序
SQL语句
SELECT
emp_name,
salary,
DENSE_RANK() over ( ORDER BY salary DESC ) AS orderNum
FROM
tb_salary
执行结果
2.3 ROW_NUMBER() OVER()(列名 ORDER BY 排序方式(DESC/ASC))ROW_NUMBER()使用排序时不会考虑重复值的产生,会一直根据列名的数值一直排序下去
SQL语句
SELECT
emp_name,
salary,
ROW_NUMBER() over ( ORDER BY salary DESC ) AS orderNum
FROM
tb_salary
执行结果