tia*_*rtr 2 sql oracle aggregate-functions ora-00979
我有一个名为bbc的国家/地区表(名称,地区,地区,人口,gdp)
我想要一张表格,其中列出了按地区划分的最大(人口最多)国家的地区,名称和人口.到目前为止,我已经尝试过这个:
SELECT region, name, MAX(population)
FROM bbc
GROUP BY region
Run Code Online (Sandbox Code Playgroud)
它给了我一条错误消息:ORA-00979:不是GROUP BY Expression
我试图更改为GROUP BY区域,名称,但它没有给我正确的表格
您可以对以下查询使用分析:
SELECT name, region, population
FROM (SELECT region, name, population
, MAX(population) OVER (PARTITION BY region) maxpop
FROM bbc)
WHERE population = maxpop;
Run Code Online (Sandbox Code Playgroud)
内联视图为您提供了一个类似于基表的表,以及一个包含该区域最大填充的额外列.您的顶级选择为您提供每个地区最大国家/地区的国家,地区和人口.
举例说明:
SELECT * FROM bbc;
REGION NAME POPULATION
--------------- ------- ----------
North America USA 300000000
North America Canada 100000000
North America Mexico 50000000
South America Brazil 50000000
South America Argentina 40000000
South America Venezuela 20000000
Run Code Online (Sandbox Code Playgroud)
添加分析函数:
SELECT region, NAME, population
, MAX(population) OVER (PARTITION BY region) maxpop
FROM bbc;
REGION NAME POPULATION MAXPOP
--------------- ------- ---------- ----------
North America USA 300000000 300000000
North America Canada 100000000 300000000
North America Mexico 50000000 300000000
South America Brazil 50000000 50000000
South America Argentina 40000000 50000000
South America Venezuela 20000000 50000000
Run Code Online (Sandbox Code Playgroud)
然后成品:
NAME REGION POPULATION
------- --------------- -----------
USA North America 300000000
Brazil South America 50000000
Run Code Online (Sandbox Code Playgroud)
还有一个编辑.您可以避免使用嵌套选择,但不能避免使用子查询:
SELECT NAME, region, population
FROM bbc
WHERE (region, population) IN
(SELECT region, MAX(population)
FROM bbc
group by region);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |