选择人口接近平均值

时间:2016-07-13 19:49:39

标签: mysql sql

我正在做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只是该国家/地区的人口。不工作,我觉得应该有一个比自己加入桌子更简单的解决方案。它是什么?

3 个答案:

答案 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子句中,您可以直接与该查询进行比较,就像它是一个数字一样。