PostgreSQL - SUM 函数
PostgreSQL - SUM() 函数
Section titled “PostgreSQL - SUM() 函数”PostgreSQL 的 SUM() 函数是一个聚合函数,用于计算一组值的总和。它通常用于查找数值列的总计,并常与分组结合使用以计算小计。
SUM() 函数的基本语法是:
SELECT SUM(column_name)FROM table_name[WHERE condition];与 GROUP BY 子句一起使用时,语法是:
SELECT group_column, SUM(aggregate_column)FROM table_nameGROUP BY group_column;设置:示例数据
Section titled “设置:示例数据”我们将使用之前课程中的同一个 employees 表。如果您没有,可以使用以下脚本创建它:
-- 为保持一致性,重用 employees 表CREATE TABLE employees ( id SERIAL PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), department VARCHAR(50), salary NUMERIC(10, 2), hire_date DATE);
INSERT INTO employees (first_name, last_name, department, salary, hire_date) VALUES('James', 'Smith', 'Sales', 55000.00, '2021-10-01'),('Maria', 'Garcia', 'HR', 60000.00, '2020-05-15'),('David', 'Smith', 'Engineering', 80000.00, '2022-01-20'),('John', 'Johnson', 'Engineering', 95000.00, '2019-03-12'),('Patricia', 'Williams', 'Sales', 58000.00, '2021-10-01'),('Robert', 'Jones', 'Engineering', 80000.00, '2022-02-11'),('Jennifer', 'Brown', 'HR', NULL, '2023-01-09');示例 1:计算总和
Section titled “示例 1:计算总和”要计算整个公司的总薪水预算,您可以在 salary 列上使用 SUM()。
SELECT SUM(salary) AS total_salary_budgetFROM employees;请注意使用别名(AS total_salary_budget)为结果列提供描述性名称。查询返回:
total_salary_budget--------------------- 428000.00(1 row)处理 NULL 值
Section titled “处理 NULL 值”SUM() 函数会忽略 NULL 值。在我们的示例中,Jennifer Brown 的 NULL 薪水未包含在计算中。如果 SUM() 的输入集为空(例如,在 WHERE 子句过滤掉所有行之后),它将返回 NULL,而不是零。
示例 2:SUM 与 GROUP BY 结合使用
Section titled “示例 2:SUM 与 GROUP BY 结合使用”SUM() 更强大的用途是计算不同组的小计。让我们找出每个部门的总薪水预算。
SELECT department, SUM(salary) AS department_salary_budgetFROM employeesGROUP BY departmentORDER BY department;此查询首先按部门对行进行分组,然后对每个组应用 SUM() 函数:
department | department_salary_budget-------------+-------------------------- Engineering | 255000.00 HR | 60000.00 Sales | 113000.00(3 rows)示例 3:SUM 与筛选结合使用
Section titled “示例 3:SUM 与筛选结合使用”您可以将 SUM() 与 WHERE 子句结合使用来计算数据子集的总和。例如,要查找“Engineering”(工程)部门中薪水超过 80,000 的员工的总薪水:
SELECT SUM(salary) AS high_earner_eng_salaryFROM employeesWHERE department = 'Engineering' AND salary > 80000;结果:
high_earner_eng_salary------------------------ 95000.00(1 row)实际应用:财务报告
Section titled “实际应用:财务报告”SUM() 在商业智能和财务报告中是基础性的。例如,在 sales(销售)表中,您可以使用它来计算:
- 上季度的总收入:
SELECT SUM(amount) FROM sales WHERE sale_date >= 'YYYY-MM-DD'; - 每个产品类别的总销售额:
SELECT category, SUM(revenue) FROM sales GROUP BY category; - 收入超过 100 万美元的区域的总销售额:
SELECT region, SUM(revenue) FROM sales GROUP BY region HAVING SUM(revenue) > 1000000;
postgresql_useful_functions.htm