如果我写
SELECT continent FROM world GROUP BY continent HAVING sum(population) >= 100000000
它将返回总数超过1亿的所有大陆。但如果我像这样忽略了GROUP BY
SELECT continent FROM world HAVING sum(population) >= 100000000
它只会返回一个大陆(在这种情况下是亚洲)。
为什么?
答案 0 :(得分:3)
当您没有GROUP BY
时,像SUM()
这样的聚合函数会在整个表格中运行,将其视为一个大组。这就是你获得一行结果的原因。
当您使用聚合函数时,除了SELECT
子句中的列之外,返回GROUP BY
列表中的任何列在技术上无效,因此您的查询不是有效的SQL。某些数据库(如MySQL)允许返回其他列作为扩展名;在这种情况下,它从组中的任意行中选择值。如果根本没有GROUP BY
子句,则整个表都是一个组,因此您可以从表中的某个随机行中获取continent
列。