我请求任何人帮助我更好地标题这个问题,我不确定如何调用它。也许有人在阅读下面的问题后会有一个想法:
所以我有一组玩家及其组存储在MySQL中。在数据库中,由于遗留原因,它们以奇怪的方式存储(如链),如下所示:
Player_Id New_Group
100 1
101 0
102 0
103 0
104 1
105 0
106 0
107 0
108 0
所以这里基本上PlayerId 100将New_Group设置为1.所以他是一个新组的开始。现在所有跟随他的球员因为New_Group为0而落入他的小组。当我们到达104时,一个新组开始。
我想要做的是编写一个查询结果,如下所示:
Player_Id Group_Id
100 1
101 1
102 1
103 1
104 2
105 2
106 2
107 2
108 2
你明白了......我正在尝试将New_Group逻辑转换为只为玩家生成伪组ID的东西。
然而,这样做超出了我的SQL技能。如果任何SQL Guru可以帮助我那将是非常棒的。我使用MySQL。
答案 0 :(得分:1)
这是怎么回事?
SET @group = 0;
SELECT Player_Id, IF(New_Group, @group:=@group + 1, @group) AS Group_Id
FROM [table]
ORDER BY Player_Id;
答案 1 :(得分:0)
SELECT player_id
, CASE WHEN new_group = 1 THEN @i:=@i+1 ELSE @i:=@i END i
FROM my_table
, (SELECT @i:=0) vars
ORDER
BY player_id;
答案 2 :(得分:0)
假设您在表格中有一些提升的列,您可以这样做:
select Player_Id, count(select * from [table] t2 where new_group=1 and t2.ascending_row <= t1.ascending_row) from [table] t1
在上面的示例中,当值全部递增时,Player_Id可用于ascending_row。如果不是,您可能需要创建一个包含行id的列的临时表,然后使用它。