问题
# 表内容
+--------+-------+-----+
| Person | Group | Age |
+--------+-------+-----+
| Bob | 1 | 32 |
| Jill | 1 | 34 |
| Shawn | 1 | 42 |
| Jake | 2 | 29 |
| Paul | 2 | 36 |
| Laura | 2 | 39 |
+--------+-------+-----+
需求结果
+--------+-------+-----+
| Shawn | 1 | 42 |
| Jill | 1 | 34 |
| Laura | 2 | 39 |
| Paul | 2 | 36 |
+--------+-------+-----+
分析
mysql8 版本才支持 over partition by 函数
解决
根据需求自行替换字段
select person, `group`, age
from
(
select person, `group`, age,
(@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number
from test t
CROSS JOIN (select @num:=0, @group:=null) c
order by `Group`, Age desc, person
) as x
where x.row_number <= 2;
使用窗口函数解决年龄排名问题

该博客讨论了如何在MySQL中利用窗口函数overpartitionby进行数据排序,特别是在MySQL8之后的支持情况。文章通过一个具体的例子展示了如何选取每个组内年龄最大的两个人,详细解释了解决方案的步骤和SQL查询语句,适用于数据处理和分析场景。
576

被折叠的 条评论
为什么被折叠?



