标准定义:开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
主要用来排序的开窗函数有:
row_number():直接按顺序排序,如果有重复值,也区分顺序的大小
dense_rank():直接按顺序排序,如果有重复值,序号并列,且序号连续(1,2,2,3)
rank():直接按顺序排序,如果有重复值,序号并列,之后的序号会跳过重复的顺序(1,2,2,4)
SQL举例:
with u as
(
select
id
,name
,phone
,work_type
from user_info
),
o as
(
select
order_id
,user_id
,create_time
,pay_time
,is_delete
from order_info
)
select
date(create_time) as create_date
,u.id
,u.name
,o.order_id
,o.create_time
,row_number() over(partition by date(create_time) order by o.create_time)
,dense_rank() over(partition by date(create_time) order by o.create_time)
,rank() over(partition by date(create_time) order by o.create_time)
from u
join o on u.id=o.user_id
where date(create_time)='2023-05-31'
order by date(create_time) desc
查询结果: