WM Blog

SQL9:在SQL中使用聚合

Word count: 522Reading time: 1 min
2020/07/29 Share

除了上篇中说到的简单表达式之外,SQL还支持一些聚合函数让我们从一组行信息从提取总结出信息。聚合函数可以被用来回答像“xxx导演执导了多少电影?”,”每一年最高分的电影是什么?”这类问题。

1
2
3
SELECT AGG_FUNC(column_or_expression) AS aggregate_description, …
FROM mytable
WHERE constraint_expression;

如果不特定指定分组,每一个聚合函数会对整个集合进行运算,返回单个值,就像一般的表达式一样,给你的聚合函数一个别称会让结果更容易阅读和处理。

常见的聚合函数

下面表格中列出了常见的聚合函数

函数 描述
COUNT(*), COUNT(column) 如果不指定列名就是返回总记录数,否则返回特定没有NULL值的行的数量
MIN(column) 返回特定列中的最小值对于所有行
MAX(column) 返回特定列中的最大值对于所有行
AVG(column) 返回特定列中的平均值对于所有行
SUM(column) 返回特定列中的数量的总和对于所有行

分组聚合函数

除了对所有行进行聚合,我们还可以按照单独的一组数据来进行聚合。
这样的结果是将会产生很多个结果,因为有很多个不同的组通过 GROUP BY 子句来进行定义。

1
2
3
4
SELECT AGG_FUNC(column_or_expression) AS aggregate_description, …
FROM mytable
WHERE constraint_expression
GROUP BY column;

GROUP BY 子句通过组合在指定列中有相同值的行来工作。

限制分组后的结果

你可能已经注意到了 GROUP BY 子句会在 WHERE 子句执行之后执行,所以我们应该如何过滤分好组的行呢?
SQL允许我们通过增加额外的 HAVING 子句来与 GROUP BY 一起使用来过滤已经被分好组的数据集。

1
2
3
4
5
SELECT group_by_column, AGG_FUNC(column_expression) AS aggregate_result_alias, …
FROM mytable
WHERE condition
GROUP BY column
HAVING group_condition;

HAVING 子句的写法和 WHERE 子句一样,但是被应用在分好组的行上。
注意:如果不使用 GROUP BY 那么就使用 WHERE 就够了。

CATALOG
  1. 1. 常见的聚合函数
  2. 2. 分组聚合函数
  3. 3. 限制分组后的结果