在物化视图中合并两个查询结果

问题描述

我正在尝试将两个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,并且没有计数列:

enter image description here

我在做什么错了?

解决方法

这是您想要的吗?

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仅采用01的值:

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;

当我运行它时,我得到了想要的结果: enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...