CodeGym /课程 /SQL SELF /用 SUM() 汇总数据 —— 语法和示例

用 SUM() 汇总数据 —— 语法和示例

SQL SELF
第 7 级, 课程 2
可用

想象一下……你有一大串超市购物清单。你想知道最后到底花了多少钱。你肯定不会手动一项项加吧?其实收银员那边早就都在数据库里了。所以你拿到的结账小票金额肯定是对的。很可能,他们的应用里就有我们今天的主角——SUM() 函数!这是个聚合函数,可以把数字类型列里的值都加起来。

SUM() 的语法

SUM() 这个函数用起来跟它名字一样简单,不过我们还是来拆解一下:

SELECT SUM(列名)
FROM 表名;

这个函数会把指定列里的所有值都加起来。但说实话:它不会神奇地把文本或者日期加起来!只能加数字。

SUM() 的用法示例

我们先来看个简单例子。假设有个 salaries 表,存着员工的工资:

employee_id salary
1 50000
2 60000
3 55000
4 75000

示例 1:汇总所有工资

你想知道公司总共发了多少工资。这样写就行:

SELECT SUM(salary) AS total_salary
FROM salaries;

结果:

total_salary
240000

发生了什么? PostgreSQL 把 salary 列里的所有值(50000 + 60000 + 55000 + 75000)加起来,然后用 total_salary 这个新列名返回结果。

示例 2:带条件的汇总

比如你只想知道工资高于 55,000 的员工总工资。用我们最爱的 WHERE 操作符:

SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;

结果:

high_salary_total
135000

这里发生了什么? PostgreSQL 先用 WHERE salary > 55000 过滤,只留下工资 60000 和 75000 的行,然后把这两个工资加起来(60000 + 75000)。

3. SUM() 的一些细节

NULL 会怎么影响 SUM()?就像我们看到的,NULL 就是“啥都没有”,SUM() 计算时会直接跳过它。来看个表:

employee_id salary
1 50000
2 60000
3 NULL
4 75000

如果我们想查总工资:

SELECT SUM(salary) AS total_salary
FROM salaries;

结果:

total_salary
185000

为啥是“185000”,不是“NULL”? PostgreSQL 计算总和时直接无视 NULL。

复杂查询里的 SUM() 示例

示例 1:一条语句里汇总+过滤

假设有个 sales 表,存着销售数据。结构如下:

product_id amount
1 150
2 200
3 NULL
1 100

你想查 product_id = 1 的 amount 总和:

SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;

结果:

total_sales
150

示例 2:总和加额外计算

还是用 salaries 表。你想知道工资总额比 200,000 多多少:

SELECT SUM(salary) - 200000 AS surplus
FROM salaries;

结果:

surplus
40000

用 SUM() 时常见的坑

对非数字数据用 SUM():如果你不小心对文本列用 SUM(),会报错。一定要确认你列的数据类型是数字。

忽略 NULL:新手经常忘了 NULL 不参与计算,这样可能会得到意外的结果。

2
任务
SQL SELF, 第 7 级, 课程 2
已锁定
汇总所有列元素
汇总所有列元素
2
任务
SQL SELF, 第 7 级, 课程 2
已锁定
带条件的求和
带条件的求和
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION