我刚开始学习SQL。我坚持这个问题。如果你能帮助我,我将不胜感激。
题: 对于每个国家,找到海拔最高的邻国…
这是一个典型的用例 ROW_NUMBER() :
ROW_NUMBER()
SELECT * FROM ( SELECT c1.cid, c1.name, c2.cid neighbour_cid, c2.name neighbour_name, ROW_NUMBER() OVER(PARTITION BY c1.cid ORDER BY c2.height DESC) rn FROM country c1 INNER JOIN neighbour n ON n.country = c1.cid INNER JOIN country c2 ON n.neighbor = c2.cid ) x WHERE rn = 1 ORDER BY name, neighbour_name
内部查询使用两个 JOIN 带来每个国家的所有邻居。 ROW_NUMBER() 为每个邻居分配一个等级,通过降低高度来排序。您可以独立运行内部查询以查看它生成的结果。
JOIN
然后,外部查询只过滤在每个组中排名第一的记录(换句话说,对于每个国家,具有最大高度的邻居)。