MySQL SUM() 函数使用指南

MySQL SUM() 函数计算所有指定的非 NULL 值的总和并返回。

SUM() 语法

这里是 MySQL SUM() 函数的语法:

SUM(expr)

我们通常在 SQL 中按如下方式使用 SUM() 函数:

SELECT SUM(expr), ...
FROM table_name
[WHERE ...];

或者按如下方式结合 GROUP BY 子句使用 SUM() 函数:

SELECT SUM(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUP BY group_expr1, group_expr2, ...;

参数

expr
expr 一个需要统计数量的表达式。它可以是一个列名,也可以是一个表达式。
group_expr1, group_expr2, ...
用于分组的表达式或者列名。

返回值

SUM(expr) 函数返回所有指定的非 NULL 值的总和。

如果没有匹配的行,SUM() 函数返回 NULL

SUM() 示例

我们将通过 student_score 表进行演示。让我们先创建演示表插入测试数据。

DROP TABLE IF EXISTS `student_score`;
CREATE TABLE `student_score` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL,
    `subject` VARCHAR(255) NOT NULL,
    `score` INT
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES ('Tom', 'Math', 80),
    ('Tom', 'English', 90),
    ('Jim', 'Math', 84),
    ('Jim', 'English', 96),
    ('Tim', 'Math', NULl),
    ('Tim', 'English', 98);

以下是表中的数据:

+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
|  1 | Tom  | Math    |    80 |
|  2 | Tom  | English |    90 |
|  3 | Jim  | Math    |    84 |
|  4 | Jim  | English |    96 |
|  5 | Tim  | Math    |  NULL |
|  6 | Tim  | English |    98 |
+----+------+---------+-------+

SUM() 简单例子

以下 SQL 语句返回 student_score 表中的所有分数的总和。

SELECT SUM(score) from student_score;
+------------+
| SUM(score) |
+------------+
|        448 |
+------------+

SUM() 结合 GROUP BY

让我们使用 SUM() 结合 GROUP BY 来从更多的维度统计总分数。

  1. 按科目统计总分数

    SELECT subject, SUM(score)
    FROM student_score
    GROUP BY subject;
    
    +---------+------------+
    | subject | SUM(score) |
    +---------+------------+
    | Math    |        164 |
    | English |        284 |
    +---------+------------+

    这里,MySQL 会根据 GROUP BY subject 首先按照 subject 将结果集分组,然后在每个组内再执行 SUM(score)

  2. 按名称统计总分数

    SELECT name, SUM(score)
    FROM student_score
    GROUP BY name;
    
    +------+------------+
    | name | SUM(score) |
    +------+------------+
    | Tom  |        170 |
    | Jim  |        180 |
    | Tim  |         98 |
    +------+------------+

    这里,MySQL 会根据 GROUP BY name 首先按照 name 将结果集分组,然后在每个组内再执行 SUM(score)