我想选择人口最多的国家.这是我的查询:
SELECT continent, name, population FROM country HAVING population = MAX(population);
它以某种方式返回0行.
如果我使用嵌套查询,它将起作用:
SELECT continent, name, population FROM country WHERE population = (SELECT MAX(population) FROM country);
所以我的问题是:第一个查询出了什么问题?
好吧,我想我终于弄清楚了整个过程.这里是如何工作的以及替代建议/解决方案为何不起作用的原因:
(首先,正如“ Dan Bracuk”在他的回答中所说,我们必须将GROUP BY与HAVING结合起来,并在SELECT语句的begininng中添加聚合函数)
因此,让我们逐步进行尝试:
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(人口)=人口.
因此,另外添加“拥有人口= MAX(人口)”无效,因为它已经成立.
我希望我能正确理解它,并能澄清其他人为什么不知道其他解决方案不起作用的问题.