首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只从sql查询中选择特定的raws。

只从sql查询中选择特定的raws。
EN

Stack Overflow用户
提问于 2021-05-21 17:14:26
回答 1查看 84关注 0票数 0

我正试图从这个数据库中收集美洲大陆上每个国家的最高峰:http://www.semwebtech.org/sqlfrontend/

当我执行这个查询时:

代码语言:javascript
复制
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

这是我所拥有的一个摘录:

代码语言:javascript
复制
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.NameWHERE之间使用ORDER BY,但是收到了错误消息:

数据库错误: ORA-00979:非按表达式分组

下面是参考依赖关系图:http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-abh.pdf

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 17:23:41

group by country.name是正确的。但你必须做更多的改变。在select子句中,您可以选择country.name,因为您是按它进行分组的。到目前一切尚好。

elevation无法忍受,这不是你想要的--你想要max(elevation) as elevation。您只需要每个组的max

更有趣的是山的名字。当然,它不是一个组函数;但是您不想这样做。你只想知道每一群人中最高的山峰的名字(也就是说,在每个国家)。有几种方法可以做到这一点,最有效的方法是

代码语言:javascript
复制
max(mountain.name) keep (dense_rank last order by elevation) as mountain_name
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67641258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档