前言
如果我们的记录可以划分为一定的分类,每个分类中选取一定量的数据。这样就称为分组选择。
如果只是选择最大或者最小的记录使用聚合函数max,min就可以得到,但是如果想要获取多个值?应该如何处理
方案
比如我们想要获取所有文章分类中,阅读量最多的前2条记录
如果使用开窗函数可以有下面的解决
with tmp as (
select a.timestr, a.kill. row_number() over(partition by a.userid order by a.kill) cnt
from t_kill a
) select * from tmp where cnt <= 2;
使用join语句处理
由于mysql中不支持开窗函数
select t2.userid, t2.timestr, t2.kill,
(select count(*) from t_kill t1 where t1.userid=t2.userid and t1.kill>=t2.kill) as cnt
from t_kill t2 group by t2.userid, t2.timestr, t2.kill
网友评论