Sql 在物化视图中合并两个查询结果
我正在尝试将两个选择结果合并到一个视图中。 第一个查询返回所有注册用户的id。 第二个查询遍历整个表,计算一个玩家的胜利数,并返回该玩家的id和胜利数 我现在要做的是合并这两个结果,这样如果用户赢了,它会说有多少,如果他没有赢,它会说0 我试着这样做:Sql 在物化视图中合并两个查询结果,sql,postgresql,Sql,Postgresql,我正在尝试将两个选择结果合并到一个视图中。 第一个查询返回所有注册用户的id。 第二个查询遍历整个表,计算一个玩家的胜利数,并返回该玩家的id和胜利数 我现在要做的是合并这两个结果,这样如果用户赢了,它会说有多少,如果他没有赢,它会说0 我试着这样做: SELECT profile.user_id FROM profile FULL JOIN ( SELECT player_game_data.user_id, count(player_game_data.user_
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,没有计数列:
我做错了什么?这是你想要的吗
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;
或者,如果是赢家
只接受0
和1
的值:
select pg.user_id, sum(ps.is_winner)
from player_game_data pg
group by pg.user_id;
谢谢你的帮助,戈登。我现在要工作了 最终查询如下所示:
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;
当我运行它时,我得到了我想要的结果:
(1)如果您使用的是
完全连接
,那么您没有使用MySQL,因此我删除了标记。(2) 将代码作为文本而不是图像放入问题中。(3) 如果你想在最终结果集中选择一列,你需要在select
中选择它。第一个解决方案工作得非常好,我只是编辑了它而不是p.*我使用了p.user\u id,因为这就是我所需要的。只有一些玩家玩过一场游戏,我现在试着从一个角度展示一个玩家玩过多少场赢、输和游戏。谢谢你的帮助!