oracle中case when的用法有哪些

1. 简介

在Oracle数据库中,case when语句是一种强大的条件语句,它允许根据不同的条件进行不同的操作。例如,您可以使用case when语句将某个列的值替换为不同的值,也可以使用它根据不同的条件返回不同的结果。在本文中,我们将深入研究Oracle中case when语句的不同用法和示例。

2. 基本语法

下面是Oracle中case when语句的基本语法:

CASE 

WHEN condition1 THEN result1

WHEN condition2 THEN result2

WHEN condition3 THEN result3

...

ELSE default_result

END

在这个语法中:

WHEN:指定一个条件

THEN:当条件满足时,执行的操作

ELSE:当没有条件满足时,执行的默认操作

这个语法中的“condition”可以是任意布尔表达式。如果“condition”为真,就会执行“result”中指定的操作。否则,“default_result”中指定的操作将被执行。请注意,case when语句在结束时必须以“END”结尾。

3. 简单示例

3.1. 将值替换为不同的值

以下是将某个列的值替换为不同的值的案例:

SELECT name, 

CASE gender

WHEN 'M' THEN 'Male'

WHEN 'F' THEN 'Female'

ELSE 'Unknown'

END AS gender_description

FROM employees;

在这个案例中,我们为员工数据表中的每个记录添加一个“gender_description”列,该列使用case when语句将“gender”列的值替换为相应的描述。

3.2. 返回不同的结果

以下是使用case when语句返回不同结果的案例:

SELECT name, age, 

CASE

WHEN age < 18 THEN 'Minor'

WHEN age BETWEEN 18 AND 65 THEN 'Adult'

WHEN age > 65 THEN 'Senior Citizen'

END AS age_group

FROM people;

在这个案例中,我们为数据表“people”中的每个记录添加了一个“age_group”列,该列使用case when语句根据年龄将每个人分组。

4. 多重条件

case when语句也可以使用多重条件。让我们来看一个例子:

SELECT name, age, 

CASE

WHEN age < 18 THEN 'Minor'

WHEN age BETWEEN 18 AND 65 AND sex = 'M' THEN 'Male Adult'

WHEN age BETWEEN 18 AND 65 AND sex = 'F' THEN 'Female Adult'

WHEN age > 65 THEN 'Senior Citizen'

END AS age_group

FROM people;

在本例中,我们根据年龄和性别使用case when语句将人们分成4个组:未成年人、成年男性、成年女性以及老年人。

5. case when与聚合函数一起使用

case when语句还可与聚合函数一起使用。让我们使用下面的SQL查询语句来获取物品销售数量和总销售额的结果:

SELECT item_name, 

SUM(quantity) AS total_sales_qty,

SUM(CASE

WHEN item_price < 20 THEN quantity * item_price

ELSE quantity * item_price * 0.9

END) AS total_sales_amt

FROM sales

GROUP BY item_name;

在这个案例中,我们将物品分为两个价格范围:小于20和大于或等于20。如果物品价格少于20,则使用原始价格计算销售总额。如果物品价格大于或等于20,则使用9折价格计算销售总额。

6. 总结

case when语句是Oracle中一个功能强大的条件语句,可用于各种用途,例如替换值、返回不同结果、使用多重条件等。还可与聚合函数一起使用,使其用途更加广泛。为了从中获得最大的效益,请确保您了解Oracle case when语句的详细语法和其在查询中使用的最佳实践。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签