mysql8窗口函数, 这只是其中两个窗口函数的使用,,我只是觉得比较方便,所以记录一下
1.ROW_NUMBER
使用案例:
select * from (SELECT
id,
name,
age,
ROW_NUMBER() OVER (PARTITION BY age ORDER BY name DESC) AS rn
FROM users) as raw_data where rn<3;
主要实现功能:
用户按年龄分组,同时在每个组内按名字排序,只取每个组的前三位,这个和group by 有很大的不同,更方便
ROW_NUMBER 必须配合 OVER 使用
2.RANK
使用案例:
SELECT *
FROM (
SELECT *,
RANK() OVER (PARTITION BY event_id ORDER BY price DESC) AS rnk
FROM tickets
) AS t
WHERE rnk = 1;
主要实现功能:
按event_id分组,获取每个event_id组内加个最高的数据
二者很相似,但是对于price相同的时候,rank 会为相同排序值的行会获得相同的排名(同时会跳号,使用 DENSE_RANK 不会跳号), 而ROW_NUMBER会连续编号(1、2、3、4...
