我需要根据每个位置的总使用量选择前5位活跃用户。
我的表结构是:
id user location date usage
1 1 1 xxx 10
1 2 2 xxx 20
1 1 1 xxx 05
1 2 2 xxx 08
1 3 1 xxx 10
1 3 1 xxx 20
1 1 1 xxx 15
1 1 1 xxx 05
...
...
...
<小时/> 的更新 我需要限制此查询以返回每个位置的前5位用户
select `location` ,`user`,sum(`usage`) from `table`
group by `location`,`user`
order by `location` ASC,sum(`usage`) DESC
但是当我把
限制0,5
限制不适用于分组
<小时/> 更新:此查询限制组中的用户,但不会将用法总和
select `user`, `location`, `usage`
from
(
select `user`, `location`, `usage`,
(@num:=if(@group = `location`, @num +1, if(@group := `location`, 1,1))) row_number
from `my_table` t
CROSS JOIN (select @num:=0, @group:=null) c
order by `location`, `usage` desc, `user`
) as x
where x.row_number <= 2;
您可以查看demo