目标:
通过编写一些代码和审查现有代码来提高我的 sql 能力。
问题:
我花了很多时间寻找基于这个问题的解决方案“3c。一些国家的人口是其任何邻国(同一地区)人口的三倍多。请给出国家和地区。“
我尝试寻找不同的解决方案,但不幸的是我无法解决这个问题:(
可以找到链接“http://sqlzoo.net/1a.htm”
还是那句话,目的是提高自己的SQL能力!
// 钢之男
目标:
通过编写一些代码和审查现有代码来提高我的 sql 能力。
问题:
我花了很多时间寻找基于这个问题的解决方案“3c。一些国家的人口是其任何邻国(同一地区)人口的三倍多。请给出国家和地区。“
我尝试寻找不同的解决方案,但不幸的是我无法解决这个问题:(
可以找到链接“http://sqlzoo.net/1a.htm”
还是那句话,目的是提高自己的SQL能力!
// 钢之男
由于您正在尝试进入 SQL 的思维方式,我将尝试对此进行分解以解释我是如何得出结论的。
为了找到此搜索背后的答案,我尝试检查数据以查看我必须使用的内容。
我发现我们真正要处理的是Population、Name(国名)和Region。这个问题说我们需要找到比同一地区其他国家更大的国家。所以,我选择了一个随机区域并检查了那里的数据:
然后我按人口对数据进行排序,以便我可以尝试了解我们要比较的内容。
如果您关注该页面,您会发现印度比面积第二大的国家巴基斯坦大得多。
接下来,我(误解了这个问题)发现所有国家的面积都是该地区任何其他国家的三倍。然而,我意识到这个问题真的是“最小尺寸的三倍”。所以,我想出了
在那里我发现人口规模大于该地区最小值的三倍。相关子查询(去研究那些)将限制比较以仅选择该地区的人口。
最后,我意识到我们应该找到比该地区所有其他国家大三倍的国家(不仅仅是该地区任何国家的三倍),所以我将查询更改为:
这将“MIN”更改为“MAX”,并从子查询中排除了与我们正在比较的国家相同的国家。因此,当我们在外部查询中比较印度时,我们在内部查询中忽略了印度——因此找到了非印度的最大国家。
最后,从外部 where 子句中删除“Region”并只拉出他们想要的两列(因为他们很挑剔):