gpt4 book ai didi

mysql 世界数据库 : select country with max population

转载 作者:可可西里 更新时间:2023-11-01 08:17:39 27 4
gpt4 key购买 nike

我想选择人口最多的国家。这是我的查询:

SELECT continent, name, population FROM country HAVING population = MAX(population);

它以某种方式返回 0 行。

如果我使用嵌套查询,它会起作用:

SELECT continent, name, population FROM country WHERE population = (SELECT MAX(population) FROM country);

所以我的问题是:第一个查询有什么问题?

PS:你可以在这里下载数据库: http://dev.mysql.com/doc/index-other.html


好吧,我想我终于弄清楚了整个过程。它是如何工作的以及为什么替代建议/解决方案不起作用:

(首先,正如“Dan Bracuk”在他的回答中所说,我们必须将 GROUP BY 与 HAVING 结合起来,并在 SELECT 语句的 beginningng 处添加聚合函数)

所以让我们一步一步来试试这个:

SELECT continent, name, population, MAX(population) FROM country;

这会产生第一行在末尾附加 MAX(pop):
“北美”、“阿鲁巴”、“103000”、“1277558000”

所以 MAX(population) 只是一个条目,所以它将行号限制为 1,因为我添加了大洲、名称、人口列,mysql 只从表中选择第一行。

所以如果我现在写下:

SELECT continent, name, population, MAX(population) FROM country HAVING population = MAX(population);

我得到 0 行,因为 103000 不等于 1277558000。

如果我使用:

SELECT continent, name, population, MAX(population) FROM country GROUP BY name;

例如,我得到了每行 MAX(population) = population 的所有国家/地区的列表。

因此,另外添加“HAVING population = MAX(population)”没有任何效果,因为它已经为真。

我希望我的理解是正确的,并且可以澄清那些想知道为什么其他解决方案不起作用的其他人。

最佳答案

Select continent, name, sum(population) As sumPop
From country
Group By continent
Order By sumPop Desc
Limit 1;

哇,经过大量的反复试验,我明白了现在的问题所在。首先,您的初始查询似乎是错误的。使用您正在使用的数据库表,您可以在大陆内拥有多个区域。因此,您的查询将仅返回(如果工作正常)具有单个最大区域的大陆,而不是所有区域的总和。其次,您绝对可以在 having 子句中使用 max 函数,例如在这个例子中:

Select continent, name, max(population) As sumPop
From country
Group By continent
Having sumPop = max(population)

(如果不按大陆分组,则只会返回一行。)

但是,这对您来说真的没有用,因为此时,最大人口就是该行的人口。不是每一行。这是因为 having 子句只查看该行的值(不管你有多少行)。无论如何,如果您想在您的案例中使用 having 子句(或者您可以使用我的初始查询),您将需要一个子查询,如下所示。

Select continent, name, sum(population) As sumPop, maxPop
From country
Left Join (Select sum(population) As maxPop
From country
Group By continent
Order By maxPop Desc Limit 1) as TmpTable On (maxPop > 0)
Group By continent
Having sumPop = maxPop

http://sqlfiddle.com/#!2/3ab95/26(这个sqlfiddle没有包含所有的表行,所以结果可能和你自己的不一样。)

关于mysql 世界数据库 : select country with max population,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com