mysql - psql表查询

标签 mysql sql psql

我有 3 张牌 table 、玩家、比赛、胜利。我想做一个查询来检索玩家 ID、姓名、他参加的比赛数量以及他获得的胜利次数。

比赛表跟踪其所在的回合、参加比赛的玩家(p_one_id 和 p_two_id),而胜利表则跟踪比赛 ID,以查看他战胜的对手以及玩家 ID。

如果我愿意

SELECT players.id, players.name, COUNT(matches.*) as matches FROM players, matches WERE matches.p_one_id = players.id GROUP BY players.id

它工作得很好,至少从我的基本测试来看(但这并不检查胜利),但如果我这样做

SELECT players.id, players.name, COUNT(matches.*) as matches, COUNT(wins.*) AS wins FROM players, matches, wins WERE matches.p_one_id = players.id AND wins.p_id = players.id GROUP BY players.id

我什么也没得到,一个原因是没有获胜,但是我只能得到获胜的人,我也不能进行子查询,因为我不能在子查询中使用玩家ID,在至少据我所知不是)。有人知道我的结果需要什么查询吗?

最佳答案

我建议使用 LEFT JOIN 而不是交叉连接/where 子句选项。您可能还希望计算玩家为“玩家 2”的比赛。大致如下:

SELECT
    p.id,
    p.name,
    count(m1.*) + count(m2.*) as matches,
    count(w.*) as wins
FROM players p
LEFT JOIN matches m1
ON m.p_one_id = p.id
LEFT JOIN matches m2
on m.p_two_id = p.id
LEFT JOIN wins w
ON w.p_id = p.id
GROUP BY p.id, p.name

关于mysql - psql表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29905664/

相关文章:

sql - 如何引用或将具有varchar主键的表与具有INT主键的表结合在一起(SQL Server)

c# - 通过缓存提高SQL Server的性能是否可行?

postgresql - ec2 服务器 postgres 错误 "version ` GLIBC_2.1 4' not found"

ruby-on-rails - Rails - 迁移错误 - PG::InvalidSchemaName: 错误:

python - 来自 psql 和 psycopg2 的 Postgresql session

mysql - 有什么方法可以检测何时在 MySQL 中执行 ALTER TABLE 语句?

mysql - 这个存储过程 SQL 命令有什么问题?

mysql - Joomla:如何检测我们表中的列是否存在,如果不存在则将其添加到表中

php - 在MYSQL中选择相关行但不限制基于WHERE子句的结果

mysql - 将多个参数传递给sql函数