在理解此查询时遇到一些问题,尤其是子查询中的WHERE。我真的没有得到它正在完成的东西。任何帮助,将不胜感激。感谢
# Find the largest country (by area) in each continent. Show the continent,
# name, and area.
SELECT continent, name, area
FROM countries AS a
WHERE area = (
SELECT MAX(area)
FROM countries AS b
WHERE a.continent = b.continent
)
答案 0 :(得分:1)
考虑以下国家/地区数据的子集:
Continent Country Area North America USA 3718691 North America Canada 3855081 North America Mexico 761602 Europe France 211208 Europe Germany 137846 Europe UK 94525 Europe Italy 116305
这是一个相关的查询,其行为如下:
对外部查询中的所有行重复。
当我们查看第2行和第4行时,第4步将匹配,以便查询返回这些行。
您可以在您的国家/地区表格中使用此数据并运行查询来检查结果。
请注意,这是确定每个大陆最大面积的国家/地区的一种非常糟糕的方式,因为它会为每个国家/地区重复子查询。使用我的样本数据,它确定北美洲的最大面积3次,欧洲的最大面积4次。
由于您在评论中提到,我会按如下方式编写此查询:
SELECT a.continent, a.name, a.area
FROM countries AS a
inner join (select continent, max(area) max_area
from countries
group by continent) as b on a.continent = b.continent
WHERE a.area = b.max_area
在此版本的查询中,每个洲的最大值仅确定一次。编写原始查询是为了说明相关查询,理解它们很重要。相关查询通常可用于解决复杂逻辑。
答案 1 :(得分:0)
子查询正在寻找国家/地区的最大区域。哪些国家?在外部查询中匹配该国家大陆的所有国家。
因此,对于每个国家,它都会占据同一大洲最大国家的面积。
然后WHERE
条款说“这两个区域是相同的 - 这个国家的最大面积和面积是多少?”。它只选择具有最大面积的国家。