【发布时间】:2018-02-20 22:48:55
【问题描述】:
我需要从 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
但我无法过滤掉有重复的行。
我正在寻找的东西是这样的:
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/
【问题讨论】:
-
除非您使用 MySQL 8+(不太可能),否则如果您还使用
ROW_NUMBER,则不能使用 MySQL。请使用您正在使用的实际数据库进行标记。 -
他可能正在使用 MySQL,这也是他所指的错误之一。
-
我正在使用我链接的网站来测试它,我不知道那是什么版本,但我从最后一个 coden-p 得到的错误是:发生数据库错误:ORA-00918:列模棱两可的定义。但这只是其中之一,一旦我修复了一个错误,我就会得到另一个错误。