2

我有一个关于左连接的查询,其中连接的表可以包含零行。问题是,如果我从中选择,则连接表中没有包含零行的行。无论如何,我该如何选择它?

这是我的查询

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 列很重要。

4

1 回答 1

2

尝试这个:

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.

于 2013-05-22T20:12:00.823 回答