当我们需要在SQL查询中根据条件来展示不同的结果时,Oracle中的CASE WHEN函数就非常有用了。它可以根据条件来动态的选择特定的值。本文将详细介绍CASE WHEN函数的用法,并提供两个示例来帮助读者更好的理解。
当我们需要在SQL查询中根据条件来展示不同的结果时,Oracle中的CASE WHEN函数就非常有用了。它可以根据条件来动态的选择特定的值。本文将详细介绍CASE WHEN函数的用法,并提供两个示例来帮助读者更好的理解。
CASE WHEN函数的语法
CASE WHEN函数的语法如下:
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
ELSE default_result
END
其中,各个参数含义如下:
condition_1
- 第一个条件,满足时返回result_1
。result_1
- 满足第一个条件时返回的结果。condition_2
- 第二个条件,满足时返回result_2
。result_2
- 满足第二个条件时返回的结果。default_result
- 如果没有条件满足,则返回的默认结果。
示例1:根据评分来划分电影档次
假设我们有一张电影表movies
,其中包含电影名称、上映日期和用户评分等信息。现在我们希望根据用户评分来划分电影档次,并给每个档次做出相应的说明。示例如下:
SELECT
title,
rating,
CASE
WHEN rating >= 9.0 THEN '经典神作'
WHEN rating >= 8.0 AND rating < 9.0 THEN '优秀佳作'
WHEN rating >= 7.0 AND rating < 8.0 THEN '值得一看'
WHEN rating >= 6.0 AND rating < 7.0 THEN '还行之作'
ELSE '不及格之作'
END AS grade
FROM movies;
以上查询语句中,我们使用了CASE WHEN函数来根据用户评分来给每个电影做出相应的评价。如果电影的评分大于等于9.0,则为经典神作;如果电影的评分在8.0~9.0之间,则为优秀佳作;如果评分在7.0~8.0之间,则为值得一看;如果评分在6.0~7.0之间,则为还行之作;否则为不及格之作。运行以上SQL语句,我们会得到以下结果:
| title | rating | grade |
|------------------------|--------|--------------|
| The Shawshank Redemption | 9.2 | 经典神作 |
| The Godfather | 9.2 | 经典神作 |
| The Godfather: Part II | 9.0 | 优秀佳作 |
| The Dark Knight | 9.0 | 优秀佳作 |
| 12 Angry Men | 8.9 | 优秀佳作 |
| Schindler's List | 8.9 | 优秀佳作 |
| The Lord of the Rings: The Return of the King | 8.9 | 优秀佳作 |
| Pulp Fiction | 8.9 | 优秀佳作 |
| The Lord of the Rings: The Fellowship of the Ring | 8.8 | 优秀佳作 |
| Forrest Gump | 8.8 | 优秀佳作 |
| Fight Club | 8.8 | 优秀佳作 |
...
我们可以看到,根据不同的评分,我们给每个电影做出了相应的评价,并用AS grade
来指定新的结果列名称。
示例2:将数值类型的数据划分为不同的区间
在某些情况下,我们可能需要将数值类型的数据划分为不同的区间,从而进行统计或分析。这时,CASE WHEN函数也非常有用。下面是一个示例:
假设我们有一张销售订单表orders
,其中包含订单号、订单金额等信息。现在我们需要统计订单金额所在的不同的区间,并在结果中给出每个区间的名称和统计数据。示例如下:
SELECT
CASE
WHEN amount < 1000 THEN '0-999元'
WHEN amount >= 1000 AND amount < 3000 THEN '1000-2999元'
WHEN amount >= 3000 AND amount < 5000 THEN '3000-4999元'
WHEN amount >= 5000 AND amount < 10000 THEN '5000-9999元'
ELSE '10000元以上'
END AS interval,
COUNT(*) AS total_orders,
SUM(amount) AS total_sales
FROM orders
GROUP BY CASE
WHEN amount < 1000 THEN '0-999元'
WHEN amount >= 1000 AND amount < 3000 THEN '1000-2999元'
WHEN amount >= 3000 AND amount < 5000 THEN '3000-4999元'
WHEN amount >= 5000 AND amount < 10000 THEN '5000-9999元'
ELSE '10000元以上'
END;
以上查询语句中,我们使用了CASE WHEN函数来将订单金额分为不同的区间,然后统计每个区间的订单总数和销售总额。运行以上SQL语句,我们会得到以下结果:
| interval | total_orders | total_sales |
|---------------|--------------|-------------|
| 0-999元 | 9826 | 6010721.62 |
| 1000-2999元 | 11233 | 19653713.6 |
| 3000-4999元 | 3886 | 16167872.35 |
| 5000-9999元 | 1940 | 12502356.35 |
| 10000元以上 | 190 | 2698193.43 |
我们可以看到,根据不同的订单金额,我们将订单数据分为了五个不同的区间,并统计出了每个区间的订单总数和销售总额。
以上就是CASE WHEN函数的基本用法。读者可以根据实际情况,灵活运用该函数,以解决各种SQL查询中的问题。
本文标题为:Oracle中case when函数的用法
- Oracle移动数据文件不停机和停机两种方式详解 2023-07-23
- 面试中老生常谈的MySQL问答集锦夯实基础 2023-12-20
- Python3.6连接Oracle数据库的方法详解 2023-12-05
- MariaDB 数据类型详细说明 2023-07-25
- redis分布式应用 2023-09-12
- scrapy-redis 分布式爬虫 爬取美女图片 2023-09-12
- MySQL group by语句如何优化 2023-12-22
- SQL Server还原完整备份和差异备份的操作过程 2023-12-04
- Mysql/MariaDB启动时处于进度条状态导致启动失败的原因及解决办法 2023-07-24
- redis如何清理缓存 2023-07-12