根据重复的列值

时间:2018-02-20 14:21:08

标签: mysql sql filter rows

我有一个从mondial数据库做一些查询,我特别坚持一个。 我必须向每个大陆展示一个人均DPG最高的国家。 (一个用于欧洲,一个用于亚洲,一个用于非洲等)。

我可以通过以下方式显示来自各大洲的所有国家和人均国内生产总值:

    SELECT DISTINCT continent.name, country.name, cast(1000000*(economy.gdp/country.population) AS decimal(16,2)) AS dgpPerCapita
FROM country 
JOIN economy ON country.code = economy.country
JOIN encompasses ON economy.country = encompasses.country
JOIN continent ON encompasses.continent = continent.name
WHERE cast(1000000*(economy.gdp/country.population) AS decimal(16,2)) is not null
order by cast(1000000*(economy.gdp/country.population) AS decimal(16,2)) desc

但是我无法过滤掉在contient中重复的行。

我正在寻找的是这样的事情:

continent                         DGPPERCAPITA    
Europe             Monaco         156004.89    
Asia               Qatar          125394.62    
America            Bermuda        87177.17    
Australia/Oceania  Australia      64317.35

我对查询非常新,我花了很多时间寻找答案,发现了这个:

SELECT *
FROM(
SELECT continent.name, country.name, 
cast(1000000*(economy.gdp/country.population) AS decimal(16,2)) AS dgpPerCapita,
ROW_NUMBER() OVER(PARTITION BY continent.name ORDER BY 
cast(1000000*(economy.gdp/country.population) AS decimal(16,2)) DESC) rn

FROM country 
JOIN economy ON country.code = economy.country
JOIN encompasses ON economy.country = encompasses.country
JOIN continent ON encompasses.continent = continent.name
              ) a
WHERE rn = 1

但它给了我一些错误。

任何帮助都会非常感激。

我用来测试我的查询的网站是:http://www.semwebtech.org/sqlfrontend/

1 个答案:

答案 0 :(得分:0)

我明白为什么你会遇到这个特定的错误,那么这个专栏名称'对于Country和Continent表来说是不明确的,在子查询中对它们进行不同的命名并且您完成了。我不确定你提到的其他错误是什么。

相关问题