我是新来的,对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个单独的查询?
谢谢!
答案 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;