我有一个关于左连接的查询,其中连接的表可以包含零行。问题是,如果我从中选择,那么连接表中没有行包含零行。 我怎么能选择呢?
这是我的查询
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表在一行中存储特定时间内服务器上有多少人。并且需要将多行计算为平均值,并且需要将其连接到另一个查询。当我省略secound选择列时,它会给我所有行(就像它应该的那样),否则它只显示一个结果,其中也存在playerData表中适当的行。
附加表数据:playerData表:
对于另一个表,在这种情况下只有id列很重要。
答案 0 :(得分: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
行一行。