MySQL Join 与可选的选择值

标签 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 表在一行中存储特定时间服务器上的人数。并且需要计算其中的多行平均值,并且需要将其连接到其他查询。当我省略第二个选择列时,它会为我提供所有行(就像它应该的那样),否则它只显示playerData表中也存在适当行的结果。

其他表数据:playerData 表:

playerData table

对于另一个表,在这种情况下只有 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/

相关文章:

MySQL 循环日期到一周和一个月的开始

mysql - 如何根据值选择要更新的列

scala - 两个分区数据帧之间的 Spark 共置连接

mysql - 完全外连接中的 SQL 错误 1064

php - HTML - MySQL 表删除条目

php - 返回奇怪的 POST 数据垃圾

php - 在 SELECTION 语句上的非对象上调用成员函数 bind_param()

SQL Server 挂起查询 2 个独立表

sql - T-SQL 基于非详尽查找返回更正后的列

sql连接函数