我正在尝试将两个SELECT结果合并到一个视图中。 第一个查询返回所有注册用户的ID。 第二个查询遍历整个表格,并计算玩家拥有多少胜利,并返回该玩家的ID和获胜次数。
我现在想要做的是合并这两个结果,以便如果用户获胜,则说明有多少,但如果他没有,则说0。
我试图这样做:
SELECT profile.user_id
FROM profile
FULL JOIN ( SELECT player_game_data.user_id,
count(player_game_data.user_id) AS wins
FROM player_game_data
WHERE player_game_data.is_winner = 1
GROUP BY player_game_data.user_id) t2 ON profile.user_id::text = t2.user_id::text;
但是最后,它仅返回玩家的ID,并且没有计数列:
我在做什么错了?
答案 0 :(得分:1)
这是您想要的吗?
select p.*,
(select count(*)
from player_game_data pg
where pg.user_id = p.user_id and pg.is_winner = 1
) as num_wins
from profile p;
或者,如果所有用户都玩过至少一个游戏,则可以使用条件聚合:
select pg.user_id,
count(*) filter (where pg.is_winner = 1)
from player_game_data pg
group by pg.user_id;
或者,如果is_winner
仅采用0
和1
的值:
select pg.user_id, sum(ps.is_winner)
from player_game_data pg
group by pg.user_id;
答案 1 :(得分:0)
感谢戈登的帮助。我已经开始工作了。
最终查询如下:
SELECT p.user_id,
( SELECT count(*) AS count
FROM player_game_data pg
WHERE pg.user_id::text = p.user_id::text AND pg.is_winner = 1) AS wins,
( SELECT count(*) AS count
FROM player_game_data pg
WHERE pg.user_id::text = p.user_id::text AND pg.is_winner = 0) AS losses,
( SELECT count(*) AS count
FROM player_game_data pg
WHERE pg.user_id::text = p.user_id::text) AS games_played
FROM profile p;