我有一个关于左连接的查询,其中连接的表可以包含零行。问题是,如果我从中选择,则连接表中不存在包含零行的行。 那么我该如何选择它呢?
这是我的查询
SELECT server.id
, COALESCE( AVG( playerData.player ) , 0 ) AS average
FROM server
LEFT JOIN playerData ON server.id = playerData.serverID
AND (playerData.timestamp > UNIX_TIMESTAMP( ) -10000)
playerData 表在一行中存储特定时间服务器上的人数。并且需要计算其中的多行平均值,并且需要将其连接到其他查询。当我省略第二个选择列时,它会为我提供所有行(就像它应该的那样),否则它只显示playerData表中也存在适当行的结果。
其他表数据:playerData 表:
对于另一个表,在这种情况下只有 id 列很重要。
最佳答案
试试这个:
SELECT server.id
, COALESCE( AVG( playerData.player ) , 0 ) AS average
FROM server
LEFT JOIN playerData ON server.id = playerData.serverID
AND (playerData.timestamp > UNIX_TIMESTAMP( ) -10000)
group by server.id
您的查询缺少 group by
子句。当您包含聚合函数(例如 AVG()
)时,查询将自动变为聚合查询。如果没有 group by
,所有行都会聚合到一行中。据推测,您希望每个 server.id
一行。
关于MySQL Join 与可选的选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700532/