【发布时间】:2014-09-16 05:22:36
【问题描述】:
假设我有一个表和查询:
由给定年份的给定大陆上给定国家的人口组成。
如果国家的人口大于大陆+3,我想返回国家平均(人口)和大陆平均人口基本上我想过滤掉与大陆小计值有一定差异的行。
我修改了这个,发现数据没有多年,数字显然是垃圾,但这只是一个例子。
create table abc (continent varchar2(30), country varchar2(30), population number, yr number)
insert into abc values ('africa', 'kenya', 50, 2005)
insert into abc values ('africa', 'egypt', 100, 2006)
insert into abc values('africa', 'south africa', 35, 2007)
insert into abc values ('africa', 'nigeria', 200, 2008)
insert into abc values ('asia', 'china', 50, 2005)
insert into abc values ('asia', 'india', 100, 2006)
insert into abc values('asia', 'japan', 35, 2007)
insert into abc values ('asia', 'korea', 200, 2008)
select continent, country, avg(population)
from abc
where ------population for each country > 3+ avg for each continent
----should return egpyt/nigeria rows and india/korea rows since average here is 96.25 for each continent.
group by rollup(continent, country)
【问题讨论】:
-
我不想假设你的桌子。向我们展示您的表结构和预期/实际输出。
-
很少有插入语句作为示例数据。
-
嗨,我很快添加了一些声明,希望能传达这个想法。我想过滤掉与小计行有一定距离的行 --- 这是 select 语句中的第二列为 NULL 的地方。
-
丢失汇总并使用
HAVING:docs.oracle.com/database/121/SQLRF/… -
我想过有,但我不知道如何用它来做一个相对简洁的查询