Oracle SUM CASE WHEN 合并使用
在 Oracle 数据库中,我们经常需要根据特定条件对数据进行汇总计算。SUM CASE WHEN 是一个非常常用的组合,它可以帮助我们根据条件对不同的行进行求和操作。本文将详细介绍 Oracle 中 SUM CASE WHEN 的用法和示例。
语法
SUM CASE WHEN 的基本语法如下:
SELECT
SUM(
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
) AS alias
FROM
table_name
WHERE
condition;
- SUM:聚合函数,用于对满足条件的行进行求和操作。
- CASE WHEN:条件语句,根据条件选择不同的值。
- condition1, condition2, …:条件表达式。
- value1, value2, …:对应条件为真时的值。
- default_value:所有条件均不满足时的默认值。
- alias:SUM 函数的别名,用于返回计算结果。
- table_name:表名,待操作的数据源。
- condition:筛选条件,可选。
示例
假设我们有一个名为 employees
的表,存储了员工的工资数据。现在我们想要根据员工的职务不同,分别计算各个职务的平均工资。我们可以使用 SUM CASE WHEN 来实现这个需求。
首先,让我们创建一个示例表 employees
,并插入一些数据:
CREATE TABLE employees (
emp_id INT,
emp_name VARCHAR(50),
job_title VARCHAR(50),
salary INT
);
INSERT INTO employees VALUES (1, 'Alice', 'Manager', 5000);
INSERT INTO employees VALUES (2, 'Bob', 'Developer', 4000);
INSERT INTO employees VALUES (3, 'Charlie', 'Developer', 4500);
INSERT INTO employees VALUES (4, 'David', 'Manager', 5500);
现在我们可以使用 SUM CASE WHEN 来计算不同职务的平均工资:
SELECT
job_title,
SUM(
CASE
WHEN job_title = 'Manager' THEN salary
ELSE 0
END
) / COUNT(
CASE
WHEN job_title = 'Manager' THEN 1
END
) AS avg_manager_salary,
SUM(
CASE
WHEN job_title = 'Developer' THEN salary
ELSE 0
END
) / COUNT(
CASE
WHEN job_title = 'Developer' THEN 1
END
) AS avg_developer_salary
FROM
employees
GROUP BY
job_title;
在以上示例中,我们使用了 SUM CASE WHEN 来分别计算了 Manager 和 Developer 这两个职务的平均工资。结果如下:
job_title | avg_manager_salary | avg_developer_salary
-------------|---------------------|----------------------
Manager | 5250 | 0
Developer | 0 | 4250
从结果可以看出,经理的平均工资为 5250,开发者的平均工资为 4250。
总结
SUM CASE WHEN 是一个功能强大且常用的组合,在处理数据汇总和计算时非常实用。通过合理地运用 CASE WHEN 语句,我们可以根据不同条件对数据进行灵活的聚合操作。在实际工作中,我们应该根据具体需求合理地运用 SUM CASE WHEN,以提高工作效率和数据处理准确性。