MySQL加入返回1行

时间:2014-08-17 13:29:27

标签: php mysql sql

我的SQL查询有问题。这是我第一次使用像这样的高级SQL操作,所以可能是我错过了一些基本的东西。我正在运行此查询:

SELECT countries.id, 
countries.name, 
AVG(users.points) AS average 
FROM countries 
LEFT JOIN users 
ON countries.id = users.country 
ORDER BY average DESC

此查询仅返回1行,并且它不跟随ORDER BY,因为返回的值是。我的目的是获取“国家/地区”表格中的所有记录,并获得每个国家/地区的用户获得的平均分数。我希望它能够返回那些没有分配用户的国家。我已经在2个查询中完成了这个并且它有效,但我想也许我只能做一个查询。我错过了什么?

1 个答案:

答案 0 :(得分:3)

它只返回一行,因为它是没有group by的聚合查询。也许你的意思是:

SELECT c.id, c.name, AVG(u.points) AS average 
FROM countries c LEFT JOIN
     users u
     ON c.id = u.country 
GROUP BY c.id, c.name
ORDER BY average DESC;

AVG()使其成为聚合查询。如果没有group by,SQL会将其解释为返回一行汇总所有行。 MySQL支持SQL标准的扩展,其中select中的列不必在group by中。在大多数数据库中,查询将返回错误。