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

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

 player_id   level   gap
    -----------------------
    123         8       20
    123         9       40
    123         9       30
    246         [NULL]  10
    246         6       30
    246         6       20
    ----------------------- 
zhaofc 回答:如何根据条件从sql表中记录信息

在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;
,

在这里查询,您可以使用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

,

您可以在postgres中使用此查询:

select x.player_id,x.level,min(x2.gap) as gap 
from (select player_id,max(level) as level 
      from table group by player_id) x 
join table x2 using(player_id,level)
group by x.player_id,x.level;

结果将是这样的:

 player_id   level   gap
    -----------------------
    123         9       30
    246         6       20
    ----------------------- 
本文链接:https://www.f2er.com/2888172.html

大家都在问