SUM
SUM() 把一列的值全加起来。SUM(列名) 忽略 NULL 值,只对非 NULL 值求和。如果整列全是 NULL,SUM 返回 NULL 而不是 0——这一点和直觉可能不同。想要安全返回 0,用 IFNULL(SUM(列名), 0)。
SUM 可以搭配 CASE WHEN 做条件求和:SUM(CASE WHEN dept_code = 2 THEN basic_salary ELSE 0 END) 只加技术部的工资。这在做交叉报表时非常实用,不用 GROUP BY 也能在一行里看到各部门的汇总数据。
以飞翔科技为例:
-- 全公司工资总额
SELECT SUM(basic_salary) AS 工资总额 FROM employees;
-- 技术部工资总额
SELECT SUM(basic_salary) AS 技术部工资总额
FROM employees
WHERE dept_code = 2;
-- 飞翔小店库存总价值(单价 × 库存量)
SELECT SUM(price * stock) AS 库存总价值
FROM products
WHERE shop_name = '飞翔小店';
-- 条件求和:各部门工资分别汇总
SELECT
SUM(CASE WHEN dept_code = 1 THEN basic_salary ELSE 0 END) AS 产品部工资,
SUM(CASE WHEN dept_code = 2 THEN basic_salary ELSE 0 END) AS 技术部工资,
SUM(CASE WHEN dept_code = 3 THEN basic_salary ELSE 0 END) AS 运营部工资
FROM employees;
最后一个例子展示了 SUM + CASE WHEN 的经典组合——适合做横向对比报表。