使用postgres中主查询的值执行子查询

时间:2011-10-13 19:40:36

标签: postgresql subquery

我试图通过使用子查询中主查询的相同值来匹配两个表之间的数据。我正在使用3个表:

世界 - 玩家所在的世界区域 玩家 - 实际玩家 被破坏的物体 - 只是一个统计表,用于跟踪玩家在世界上的进展

我要做的是创建一个查询,显示他们所处的游戏和世界,并计算他们在该世界中所摧毁的所有对象。我的查询目前是这样的:

select
    world_id,
    world_name,
    player_id
    count(select * from objects_destoryed where player_id = <insert player ID>) as Stats
from
    Worlds
    join Players using (player_id)
where
    player_id = <insert player ID>

我要问的是,是否有更好的方法,而不是包括玩家ID两次以获得整体统计数据。还有一种方法可以扩展这个以运行在那个世界的多个玩家吗?比如在声明中使用player_id。

感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

我没有使用过postgresql,但在其他版本的SQL中,这样的东西会起作用:

select
    world_id,
    world_name,
    player_id
    count(*) as Stats
from
    Worlds
    join Players using (player_id)
    join objects_destroyed using (player_id)
where
    player_id = <insert player ID>
group by world_id, world_name, player_id

目标是让select语句为世界中玩家销毁的每个对象返回一行,然后允许group by子句将具有相同世界和玩家的行折叠成一行,并带有数字合并为“统计数据”的行数。

为了让几个玩家获得这个返回结果,你只需要更改你的where子句,使其键入世界,而不是玩家。每个参与该世界的玩家都有自己的一行。

相关问题