我试图通过使用子查询中主查询的相同值来匹配两个表之间的数据。我正在使用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。
感谢您的任何建议
答案 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子句,使其键入世界,而不是玩家。每个参与该世界的玩家都有自己的一行。