MySQL 中每个 ID 的前 N 行
first N row of each id in MySQL
我有一个 table 我的用户分数是这样的:
id | kills
----------
2 | 1
1 | 1
1 | 5
1 | 3
2 | 4
2 | 5
3 | 5
我想获得每个玩家的前两行超过 2 次击杀。所以结果应该是这样的
id | kills
----------
1 | 5
1 | 3
2 | 4
2 | 5
3 | 5
我试过了,但没用:
SELECT *
FROM user_stats us
WHERE
(
SELECT COUNT(*)
FROM user_stats f
WHERE f.id=us.id AND f.kills > 2
) <= 2;
select * from user_stats
where (id,kills) in (select id, max(kills) from user_stats where kills > 2 group by id
union
select id, min(kills) from user_stats where kills > 2 group by id)
我怀疑您只想要杀死数大于 2 的用户的两个最大值。如果是这样,请使用变量:
select us.*
from (select us.*,
(@rn := if(@i = id, @rn + 1,
if(@i := id, 1, 1)
)
) as seqnum
from user_stats us cross join
(select @rn := 0, @i := -1) params
where us.kills > 2
order by us.id, kills desc
) us
where seqnum <= 2;
试试这个。我来自 Oracle,其中 rownum 是所选行的计数。这应该有相同的效果。
select @rownum:=@rownum+1, us.*
from user_stats us , (select @rownum := 0) r
where id in (
select id from user_stats f
group by id
having count(*) > 2
)
and @rownum < 3;
基于 vkp 的响应。当 id 超过 1 次击杀时取最小值和最大值
select id, max(kills)
from user_stats
group by id
having count(kills) > 2
union
select id, min(kills)
from user_stats
group by id
having count(kills) > 2
order by id
我有一个 table 我的用户分数是这样的:
id | kills
----------
2 | 1
1 | 1
1 | 5
1 | 3
2 | 4
2 | 5
3 | 5
我想获得每个玩家的前两行超过 2 次击杀。所以结果应该是这样的
id | kills
----------
1 | 5
1 | 3
2 | 4
2 | 5
3 | 5
我试过了,但没用:
SELECT *
FROM user_stats us
WHERE
(
SELECT COUNT(*)
FROM user_stats f
WHERE f.id=us.id AND f.kills > 2
) <= 2;
select * from user_stats
where (id,kills) in (select id, max(kills) from user_stats where kills > 2 group by id
union
select id, min(kills) from user_stats where kills > 2 group by id)
我怀疑您只想要杀死数大于 2 的用户的两个最大值。如果是这样,请使用变量:
select us.*
from (select us.*,
(@rn := if(@i = id, @rn + 1,
if(@i := id, 1, 1)
)
) as seqnum
from user_stats us cross join
(select @rn := 0, @i := -1) params
where us.kills > 2
order by us.id, kills desc
) us
where seqnum <= 2;
试试这个。我来自 Oracle,其中 rownum 是所选行的计数。这应该有相同的效果。
select @rownum:=@rownum+1, us.*
from user_stats us , (select @rownum := 0) r
where id in (
select id from user_stats f
group by id
having count(*) > 2
)
and @rownum < 3;
基于 vkp 的响应。当 id 超过 1 次击杀时取最小值和最大值
select id, max(kills)
from user_stats
group by id
having count(kills) > 2
union
select id, min(kills)
from user_stats
group by id
having count(kills) > 2
order by id