首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法检索国家和地区的数据

无法检索国家和地区的数据
EN

Database Administration用户
提问于 2011-07-24 11:50:56
回答 1查看 1.4K关注 0票数 2

目标:

通过编写代码和检查现有代码来提高我的sql能力。

问题:

我花了很多时间在这个问题的基础上找出一个解决办法:"3c。有些国家的人口是其邻国(同一地区)的三倍以上。给这些国家和地区。“

我试图找到不同的解决方案,但不幸的是,我无法解决这个问题:

这个链接可以找到"http://sqlzoo.net/1a.htm“。

同样,我的目的是提高我的SQL能力!

//全金属男孩

EN

回答 1

Database Administration用户

回答已采纳

发布于 2011-08-02 21:14:31

既然您正试图进入SQL思维方式,我将尝试将其分解以解释我是如何得出结论的。

为了找到这个搜索的答案,我试着检查数据,看看我需要处理什么。

代码语言:javascript
复制
SELECT * FROM bbc

我发现我们真正需要处理的是人口、名称(国名)和地区。这个问题指出,我们需要找到比同一区域其他国家更大的国家。因此,我选择了一个随机区域,并检查了那里的数据:

代码语言:javascript
复制
SELECT * FROM bbc
WHERE region = 'South Asia'

然后,我按人口对数据进行排序,这样我就可以尝试理解我们将要比较的内容。

代码语言:javascript
复制
SELECT * FROM bbc
WHERE region = 'South Asia'
ORDER BY population DESC

如果你关注这一页,你可以看到印度比下一个大国巴基斯坦大得多。

其次,我(误解了这个问题)发现,所有国家的面积是该区域任何其他国家的三倍。然而,我意识到这个问题实际上是“最小问题的三倍”。所以,我想出了

代码语言:javascript
复制
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研究这些查询)将限制比较只选择该区域的种群。

最后,我意识到我们应该找到一个比该地区所有其他国家都大三倍的(不只是该地区任何国家的三倍),所以我把我的查询改为:

代码语言:javascript
复制
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“,只提取它们想要的两个列(因为它们很挑剔):

代码语言:javascript
复制
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 DESC
票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/4066

复制
相关文章

相似问题

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