我有以下问题:
有些国家的人口数量是其邻国(在同一大洲)的三倍以上。给各个国家和大陆。
我的查询:
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中列出。但我想知道我的逻辑有什么问题。
中提出的最后一个问题答案 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”,它返回来自每个大陆的最小人口。