SQL中的GROUP BY和HAVING

时间:2015-03-27 01:08:32

标签: sql

如果我写

SELECT continent FROM world GROUP BY continent HAVING sum(population) >= 100000000

它将返回总数超过1亿的所有大陆。但如果我像这样忽略了GROUP BY

SELECT continent FROM world HAVING sum(population) >= 100000000

它只会返回一个大陆(在这种情况下是亚洲)。

为什么?

1 个答案:

答案 0 :(得分:3)

当您没有GROUP BY时,像SUM()这样的聚合函数会在整个表格中运行,将其视为一个大组。这就是你获得一行结果的原因。

当您使用聚合函数时,除了SELECT子句中的列之外,返回GROUP BY列表中的任何列在技术上无效,因此您的查询不是有效的SQL。某些数据库(如MySQL)允许返回其他列作为扩展名;在这种情况下,它从组中的任意行中选择值。如果根本没有GROUP BY子句,则整个表都是一个组,因此您可以从表中的某个随机行中获取continent列。