目标:
通过编写代码和检查现有代码来提高我的sql能力。
问题:
我花了很多时间在这个问题的基础上找出一个解决办法:"3c。有些国家的人口是其邻国(同一地区)的三倍以上。给这些国家和地区。“
我试图找到不同的解决方案,但不幸的是,我无法解决这个问题:
这个链接可以找到"http://sqlzoo.net/1a.htm“。
同样,我的目的是提高我的SQL能力!
//全金属男孩
发布于 2011-08-02 21:14:31
既然您正试图进入SQL思维方式,我将尝试将其分解以解释我是如何得出结论的。
为了找到这个搜索的答案,我试着检查数据,看看我需要处理什么。
SELECT * FROM bbc我发现我们真正需要处理的是人口、名称(国名)和地区。这个问题指出,我们需要找到比同一区域其他国家更大的国家。因此,我选择了一个随机区域,并检查了那里的数据:
SELECT * FROM bbc
WHERE region = 'South Asia'然后,我按人口对数据进行排序,这样我就可以尝试理解我们将要比较的内容。
SELECT * FROM bbc
WHERE region = 'South Asia'
ORDER BY population DESC如果你关注这一页,你可以看到印度比下一个大国巴基斯坦大得多。
其次,我(误解了这个问题)发现,所有国家的面积是该区域任何其他国家的三倍。然而,我意识到这个问题实际上是“最小问题的三倍”。所以,我想出了
SELECT * FROM bbc
WHERE region = 'South Asia'
AND population >
(SELECT MIN(b.population) * 3
FROM bbc AS b
WHERE b.region = bbc.Region)
ORDER BY population DESC在那里,我发现人口的大小是那个区域的最小值的三倍。相关子查询(go研究这些查询)将限制比较只选择该区域的种群。
最后,我意识到我们应该找到一个比该地区所有其他国家都大三倍的(不只是该地区任何国家的三倍),所以我把我的查询改为:
SELECT * FROM bbc
WHERE region = 'South Asia'
AND population >
(SELECT MAX(population) * 3
FROM bbc AS b
WHERE b.region = bbc.region
AND b.name <> bbc.name)
ORDER BY population DESC这将"MIN“改为"MAX”,并将与我们比较的国家相同的国家排除在子查询之外。所以,当我们在外部查询中比较印度时,我们在内部查询中忽略了印度--从而找到了不属于印度的最大国家。
最后,从外部where子句中删除"RegioN“,只提取它们想要的两个列(因为它们很挑剔):
SELECT name, region FROM bbc
WHERE population >
(SELECT MAX(population) * 3
FROM bbc AS b
WHERE b.region = bbc.region
AND b.name <> bbc.name)
ORDER BY population DESChttps://dba.stackexchange.com/questions/4066
复制相似问题