我的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个查询中完成了这个并且它有效,但我想也许我只能做一个查询。我错过了什么?
答案 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
中。在大多数数据库中,查询将返回错误。