Oracle中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函数的用法 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Windows服务器安装PHP MongoDB扩展的方法

    下面是详细讲解“Windows服务器安装PHP MongoDB扩展的方法”的完整攻略: 步骤一:确认PHP版本 首先,我们需要确认我们安装的PHP的版本。MongoDB扩展需要与PHP版本匹配才能正常工作。 可以通过以下命令在命令行中查看PHP的版本: php -v 示例输出: PHP 7.3.6 (cli) (built: May 30 2019 12:0…

    database 2023年5月22日
    00
  • MySQL算术/比较/逻辑/位/运算符与正则举例详解

    MySQL算术运算符 MySQL提供了常见的算术运算符,包括加、减、乘、除和取余。 运算符 描述 + 加法 – 减法 * 乘法 / 除法 % 取余操作 示例代码 SELECT 10+5; — 输出 15 SELECT 10-5; — 输出 5 SELECT 10*5; — 输出 50 SELECT 10/5; — 输出 2 SELECT 10%3; …

    database 2023年5月22日
    00
  • MySQL 连接查询的原理和应用

    一、MySQL 连接查询的原理 MySQL 连接查询(JOIN)是 SQL 查询中最常用的一种查询方式之一,通过该方式可以实现在多张表中对数据的关联查询。连接查询的主要原理是通过连接条件将两张表中的记录进行匹配,最终返回匹配的结果集。连接条件可以通过指定相同的列进行匹配,也可以通过使用运算符、LIKE 等操作符进行匹配。 JOIN 查询一般分为以下几种类型:…

    database 2023年5月22日
    00
  • Linux中 MySQL 授权远程连接的方法步骤

    下面是详细的步骤和示例: 1. 修改 MySQL 配置文件 首先需要修改 MySQL 的配置文件,找到 MySQL 配置文件 my.cnf 或者 my.ini,打开文件并找到 [mysqld] 段,添加以下内容: # 允许远程连接 bind-address = 0.0.0.0 # 开启远程连接授权 skip-networking = 0 其中 bind-ad…

    database 2023年5月22日
    00
  • 查看 MySQL 已经运行多长时间的方法

    要查看MySQL服务器已经运行多长时间了,有多种方法可以实现,下面我将向你详细讲解这些方法: 方法一:使用系统命令 我们可以使用系统命令“ps -ef | grep mysql”来查找MySQL服务进程,并查看进程运行的时间。具体步骤如下: 打开终端,输入以下命令,查找MySQL服务进程: $ ps -ef | grep mysql 查看MySQL服务进程的…

    database 2023年5月22日
    00
  • 了解Linux

    了解 Linux 的完整攻略包括以下几个步骤: 1. 安装 Linux 操作系统 首先,需要下载并安装一个 Linux 操作系统。目前,广泛使用的 Linux 操作系统有 Ubuntu、Debian、Fedora、CentOS 等等。可以选择自己喜欢的操作系统,并查看官方教程进行安装。 示例:如果你是一个初学者,建议使用 Ubuntu 操作系统。你可以访问 …

    database 2023年5月22日
    00
  • Redis使用ZSET实现消息队列使用总结一

    转载请注明出处:    redis用zset做消息队列会出现大key的情况吗 在Redis中,使用zset作为消息队列,每个消息都是一个元素,元素中有一个分数代表了该消息的时间戳。如果系统中有大量消息需要入队或者大量的不同的队列,这个key的体积会越来越大,从而可能会出现大key的情况。 当Redis存储的某个键值对的大小超过实例的最大内存限制时,会触发Re…

    Redis 2023年4月10日
    00
  • Mysql版sql语句练习50题(小结)

    Mysql版sql语句练习50题(小结)是一篇介绍SQL语句练习的文章,其中包括50个SQL练习题。以下是这篇文章的完整攻略。 1. 标题和介绍 本文的第一个部分是标题和介绍。标题必须清晰明确,能够概括全文内容,而介绍部分要简要介绍主题,阐明文章目的和对读者所提供的帮助。 2. SQL练习题概述 在本文的第二个部分中,作者简要介绍了文章主题——SQL语句练习…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部