我有一张桌子
CREATE TABLE t (
id INTEGER PRIMARY KEY NOT NULL DEFAULT,
country CHARACTER VARYING(40),
city CHARACTER VARYING(40),
population NUMERIC(10,6) DEFAULT NULL::numeric
);
我想要的是从人口少于人口平均数的表中获得国家,城市。
就像我有数据一样
id | country | city | population
1 | US | New York | 250
2 | US | dalas | 150
3 | UK | london | 300
4 | UK | york | 100
平均人口为200,因此查询应列出US, dalas
和UK, york
作为答案。
答案 0 :(得分:0)
尝试此查询:
select * FROM T
where populuation< (SELECT AVG(population) FROM T)
答案 1 :(得分:0)
另一个可能表现更好的选择是使用CTE和Window函数,以及基于其输出的过滤器。
WITH base_data as (SELECT t, avg(population)
OVER (range unbounded preceding) as average
FROM t)
SELECT (t).* from base_data where t.population < average;
您不必像我一样将行和聚合数据分开(将表类型选为字段并在过滤后的查询中将其展开),事实上,如果您不介意返回平均值,您也可以:
WITH base_data as (SELECT *, avg(population)
OVER (range unbounded preceding) as average
FROM t)
SELECT * from base_data where t.population < average;