如何根据条件从sql表中记录信息

问题描述 投票:0回答:2

在下表中记录玩家信息(玩家信息)。检查每个玩家的最高级别(玩家ID)和该级别下的最小差距。

 player_id   level   gap
    -----------------------
    123         8       20
    123         9       40
    123         9       30
    246         [NULL]  10
    246         6       30
    246         6       20
    ----------------------- 
mysql sql postgresql greatest-n-per-group
2个回答
0
投票

在Postgres中,您将使用distinct on

select distinct on (player_id), t.*
from t
order by player_id, level desc, gap;

在MySQL或Postgres中,您可以执行:

select t.*
from (select t.*,
             row_number(player_id) order by (level desc, gap) as seqnum
      from t
     ) t
where seqnum = 1;

0
投票

这里查询,您可以为此使用min()max()函数。

select min(t1.gap), t2.lev, t1.player_id
from tableA t1
inner join 
    (select max(lev) lev, player_id
    from tableA
    group by player_id) t2 on t2.lev=t1.lev and t1.player_id = t2.player_id
group by t1.player_id, t2.lev

请参见dbfiddle

© www.soinside.com 2019 - 2024. All rights reserved.