【问题标题】:filtering our rows based on duplicate column values根据重复的列值过滤我们的行
【发布时间】: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:列模棱两可的定义。但这只是其中之一,一旦我修复了一个错误,我就会得到另一个错误。

标签: mysql sql filter rows


【解决方案1】:

我明白你为什么会遇到那个特定的错误,那么“名称”列对于 Country 和 Continent 表是不明确的,在子查询中以不同的方式命名它们就可以了。我不确定您提到的另一个错误是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多