我正在做khanacademy的SQL课程,我正在玩this数据集。它包括列等级(主键),国家,人口等。我想选择与全球人口平均值接近的国家 - 例如如果全球人口平均值为30米,我想选择人口为20-40万的国家。
现在,我尝试了几件事,但都没有效果。 This question类似,我试图修改这样的答案:
SELECT a.country, a.population, b.max_pop
FROM countries_by_population a
INNER JOIN (
SELECT rank, MAX(population) as max_pop
FROM countries_by_population
GROUP BY rank
) b ON a.rank = b.rank
WHERE a.population > b.max_pop*0.9;
但是,返回所有行,而max_pop只是该国家/地区的人口。不工作,我觉得应该有一个比自己加入桌子更简单的解决方案。它是什么?
答案 0 :(得分:0)
link_to
答案 1 :(得分:0)
这里最重要的区别是没有SELECT
a.country,
a.population
FROM
countries_by_population a
WHERE
ABS((a.population - (select AVG(population) from countries_by_population)) / a.population) < .1
。
group by rank
答案 2 :(得分:0)
使用SQL时,自联接非常常见,不要害怕它们。在这种情况下,您不需要一个。
在您的查询中,您按排名进行分组,这是主键,所以当然您将获得每一行。您实际上并没有在代码中的任何位置使用AVG()。您应该有一个嵌套查询,如
(SELECT AVG(population) from countries_by_population)
它将为您提供目标号码,然后在您的where子句中,您可以直接与该查询进行比较,就像它是一个数字一样。