i具有格式的数据
|user_id|week_id|betId|
|1|1|...|
|1|1|...|
|1|3|...|
|2|2|...|
|2|3|...|
这些是用户可以在每个游戏周内放置许多赌注的赌注。我想转换这些数据,以便我有一个二进制列,该列指示使用用户下注,因此,以我的示例为例,它将是:
|week_id|user_id|did_play|
|1|1|1|
|1|2|0|
|2|1|0|
|2|2|1|
|3|1|1|
|3|2|1|
有人可以解释一下SQL查询的样子
我目前已经设法使用以下方式为每个游戏周的每个用户获取计数:
SELECT user_id, week_id, count(user_id)
FROM game_slips
GROUP by week_id, user_id
我只想将计数变成播放的二进制列
您可以使用cross join
生成所有行,然后转换为布尔值:
select u.userId, w.weekId, (count(t.userId) > 0) as did_play
from (select distinct userId from t) u cross join
(select distinct weekId from t) w left join
t
on t.userId = u.userId and t.weekId = u.weekId
group by u.userId, w.weekId