MySQL加入可选的选择值

时间:2013-05-22 19:57:22

标签: mysql sql join left-join where-clause

我有一个关于左连接的查询,其中连接的表可以包含零行。问题是,如果我从中选择,那么连接表中没有行包含零行。 我怎么能选择呢?

这是我的查询

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表:

playerData table

对于另一个表,在这种情况下只有id列很重要。

1 个答案:

答案 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行一行。