我正试图从这个数据库中收集美洲大陆上每个国家的最高峰:http://www.semwebtech.org/sqlfrontend/
当我执行这个查询时:
SELECT DISTINCT Country.Name AS Country, Mountain.Name AS Mountain, Elevation FROM Mountain
JOIN Geo_Mountain ON Mountain=Name
JOIN Encompasses ON Geo_Mountain.Country=Encompasses.Country
JOIN Country ON Geo_Mountain.Country=Country.Code
WHERE Continent='North America' OR Continent='South America'
ORDER BY Country.Name, Elevation DESC这是我所拥有的一个摘录:
COUNTRY MOUNTAIN ELEVATION
Argentina Aconcagua 6962
Argentina Ojos del Salado 6893
Argentina Monte Pissis 6795
Bolivia Alto Toroni 5982
Bolivia Licancabur 5920
Bolivia Ollagüe 5870
Bolivia Zapaleri 5653问题是我把所有的山都列在数据库里了,我不能只为每个国家选择最高的山
我试图在GROUP BY Country.Name和WHERE之间使用ORDER BY,但是收到了错误消息:
数据库错误: ORA-00979:非按表达式分组
下面是参考依赖关系图:http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-abh.pdf
发布于 2021-05-21 17:23:41
group by country.name是正确的。但你必须做更多的改变。在select子句中,您可以选择country.name,因为您是按它进行分组的。到目前一切尚好。
elevation无法忍受,这不是你想要的--你想要max(elevation) as elevation。您只需要每个组的max。
更有趣的是山的名字。当然,它不是一个组函数;但是您不想这样做。你只想知道每一群人中最高的山峰的名字(也就是说,在每个国家)。有几种方法可以做到这一点,最有效的方法是
max(mountain.name) keep (dense_rank last order by elevation) as mountain_namehttps://stackoverflow.com/questions/67641258
复制相似问题