按等级按顺序设置字段,但在另一个字段的组中

时间:2017-09-20 01:40:14

标签: mysql sql-order-by

我是新来的,对mysql问题非常困惑。

我的桌子有文件: username VARCHAR,state VARCHAR,得分INT,排名INT

我正在尝试根据用户分数设置排名字段,但是按州分别设置。

如果我忽略状态,我发现我可以为他们设置排名:

  

SET @pos:= 0; UPDATE配置文件SET rank =(SELECT @pos:= @pos +   1)现金订购DESC

我可以将它设置为这样的单个状态:

  

“SET @pos:= 0; UPDATE profiles SET rank =(SELECT @pos:= @pos + 1)   WHERE homeState ='亚利桑那'订购现金DESC“

是否可以按状态对它们进行分组,并在一个查询中按状态设置其排名,而不是50个单独的查询?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在select中执行此操作:

select p.*,
       (@rn := if(@s = state, @rn + 1,
                  if(@s := state, 1, 1)
                 )
       ) as rn
from profiles p cross join
     (select @s := '', @rn := 0) params
order by state, score desc;

要将此更新,您可以使用join

update profiles p join
       (select p.*,
               (@rn := if(@s = state, @rn + 1,
                          if(@s := state, 1, 1)
                         )
               ) as rn
        from profiles p cross join
             (select @s := '', @rn := 0) params
        order by state, score desc
       ) pp
       on p.username = pp.username
    set p.rank = pp.rn;