创建一个转换"链接的查询" ids到"分组" IDS

时间:2017-05-05 15:15:56

标签: mysql

我请求任何人帮助我更好地标题这个问题,我不确定如何调用它。也许有人在阅读下面的问题后会有一个想法:

所以我有一组玩家及其组存储在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。

3 个答案:

答案 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的列的临时表,然后使用它。