SQL相关的子查询

时间:2018-05-06 14:31:30

标签: mysql sql database

我有以下问题:

  

有些国家的人口数量是其邻国(在同一大洲)的三倍以上。给各个国家和大陆。

我的查询:

select name,continent from world x 
where population > 
(select 3*min(population) from world y 
where x.continent=y.continent 
group by y.continent)

语法正确但输出错误。我知道这可以通过连接来完成,还有不同的方法可以在Stack Overflow中列出。但我想知道我的逻辑有什么问题。

这个问题是http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial

中提出的最后一个问题

2 个答案:

答案 0 :(得分:0)

问题在于caluse self.log.info("Running command: %s", bash_command) sp = Popen( ['bash', fname], stdout=PIPE, stderr=STDOUT, cwd=tmp_dir, env=self.env, preexec_fn=pre_exec)

如果我理解正确,你可以这样做。

and group by

修改

我看到了你的编辑问题。

您可以使用SELECT x.NAME, x.continent FROM world x INNER JOIN world y ON x.continent=y.continent group by x.continent,x.name,x.population Having x.population > min(y.population)*3 来比较同一ALL中的所有国家/地区。

continent

答案 1 :(得分:0)

你的逻辑是正确的。

GROUP BY不是比较的条件,因此您的逻辑运算“AND”无效。删除“AND”&一切都应该按你的需要工作。

正如P.Salmon所说:

“GROUP BY”是与“WHERE”分开的操作。但是“GROUP BY”逻辑上与“min(population)”功能相关。而不是min返回表中最低的pop,而是“GROUP BY continent”,它返回来自每个大陆的最小人口。

Examples SQLFiddle for further fiddling