我正在试图找出哪个国家的人口最接近全球平均国家人口。
我有以下关系;
Column | Type | Modifiers
------------+-----------------------+-----------
name | character varying(35) | not null
code | character varying(4) | not null
capital | character varying(35) |
province | character varying(35) |
area | numeric |
population | numeric |
我尝试过这样做,我只需选择名称,国家/地区的人口,获得平均国家/地区人口,然后将其与where子句进行比较。最后,我只想设置一个限制1来获得所需的结果。奇怪的是,我不能这样做,我做错了什么?我正在使用PostgreSQL。
select name, population, avg(population) as gac
from country
where population <= avg(population);
错误;错误:WHERE子句中不允许聚合 第1行:... pulation)作为人口&lt; = avg(人口...
)的国家的gac答案 0 :(得分:2)
您可以按一个国家/地区的人口与总平均值之间的最小差异进行排序
select name, population, population,
(select avg(population) from country) as gac
from country
order by abs(population - (select avg(population) from country))
最后一行执行以下操作:
从国家/地区表中获取平均人口
select avg(population) from country
从当前国家(当前行)的人口中减去平均人口
population - (select avg ...)
获取该计算的绝对值 - 将负值反转为正值
abs(...)
按计算顺序排列。它从与平均人口差异最小的人群开始
答案 1 :(得分:1)
我可能会使用window函数:
select
name, population, population
from
country
order by
abs(population - avg(population) over())
limit 1
或具有全球平均值的cross-joined个国家/地区:
select
name, population, population
from
country
cross join (select avg(population) gac from country) gac
order by
abs(population - gac.gac)
limit 1