6.1 聚合函数列表

当您在 SQL 中使用带运算符的行分组时GROUP BY,您可以SELECT在语句中使用对分组数据进行操作的函数。此类函数也称为聚合函数。

以下是最受欢迎的列表:

# 功能 描述
1个 数数() 返回一组值的个数
2个 和() 返回一组值的总和
3个 最大限度() 返回组的最大值
4个 最小值() 返回组的最小值
5个 平均值() 返回一组的平均值
6个 位与() 对所有组值执行按位与
7 位或() 对所有组值执行按位或
8个 BIT_异或() 对所有组值执行按位异或
9 GROUP_CONCAT() 将所有组值连接成一个字符串
这不是聚合函数的完整列表,但其余的非常具体,我认为您在未来 5 年内不会使用它们。如果您仍然需要它们,您可以随时阅读 DBMS 的官方文档。

现在让我们看一些使用聚合函数的例子。

6.2 分析员工工资

让我们从employee表中计算一些关于我们员工的统计数据。

问题一:我们有多少员工?

如果我们想找出表中所有记录的数量,那么我们可以为此使用聚合函数COUNT。该请求将如下所示:

SELECT COUNT(*) FROM employee

MySQL 将返回数字 6 作为响应。我们部门有 6 名员工,包括一只猫。好的。

问题二:我们每个月给所有员工发多少钱?

要回答这个问题,我们需要对所有员工的工资求和。为此,我们使用聚合函数SUM()

该请求将如下所示:

SELECT SUM(salary) FROM employee

注意,这次我们需要指定我们汇总的是哪一列的值。我们指定了salary列。我们不能只对表中的所有字段求和。

而MySQL会返回数字461000作为答案。我们部门有6名员工,工资是461千。太多了。

最后,第三个问题:我们部门的最高和最低工资是多少?好吧,让我们计算一下平均工资。为此,我们需要函数MIN,MAXAVG

这次查询会有点复杂,看起来像这样:

SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee

此查询的结果将是:

最低(工资) AVG(工资) MAX(工资)
1000 76833.3333 200000

我们部门的最低工资是 1,000 美元——非常好。顶薪20万,这可是导演啊。

但是平均工资太高了,你需要以某种方式优化成本。让我们雇用另一只猫,仅此而已:)