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日

相关文章

  • Java异常处理之try…catch…语句的使用进阶

    Java异常是一种在程序执行时发生的不正常情况,例如除以零、数组越界等。正确地处理Java异常可以保证程序的稳定性和安全性。在Java中,使用try…catch…语句可以方便地处理异常。 try…catch…语句的基本使用 try…catch…语句用于捕获可能会发生的异常,并在异常发生时进行相关处理。基本语法如下: try { // …

    database 2023年5月21日
    00
  • 基于redis key占用内存量分析

    下面我将详细讲解“基于 Redis Key 占用内存量分析”的完整攻略,分为以下几个步骤: 第一步:查看数据类型及大小 Redis 中的数据类型包括字符串、哈希、列表、集合和有序集合。不同类型的数据所占用的内存大小也是不同的。因此,我们首先需要查看 Redis 中各种数据类型的大小,然后才能分析各个 key 的内存占用情况。 字符串类型 字符串类型的数据一般…

    database 2023年5月22日
    00
  • Redis设置生存时间或过期时间的相关命令

    一.前言    本文简单地记录一下Redis中设置key的生存时间或过期时间的方式。 二.设置key的生存时间   通过EXPIRE命令和PEXPIRE命令,可以给key设置生存时间(Time To Live,TTL),EXPIRE设置的时间单位为秒,PEXPIRE设置的时间单位为毫秒,在经过指定的生存时间后,Redis服务器会自动删除生存时间为0的key。…

    Redis 2023年4月12日
    00
  • PHP与SQL语句常用大全

    PHP与SQL语句常用大全 PHP的SQL语句通常用于与数据库交互,包括数据查询、数据更新、数据插入等操作。下面是一些常用的SQL语句及其PHP实现。 数据库连接 连接数据库是操作数据库的第一步,可以使用mysqli或PDO扩展连接数据库。 mysqli扩展 $mysqli = new mysqli("localhost", "…

    database 2023年5月21日
    00
  • MyBatis学习教程(三)-MyBatis配置优化

    MyBatis学习教程(三)-MyBatis配置优化 在使用MyBatis进行数据库操作时,合理的配置可以提高程序的运行效率和安全性。本篇文章将从以下几个方面介绍MyBatis配置的优化方法: 1.优化数据源 数据源是MyBatis连接数据库的核心,使用正确的数据源可以有效提高数据库操作的效率。常见的数据源有Apache DBCP、C3P0、Druid等,其…

    database 2023年5月19日
    00
  • JavaBean(EJB) 3.0 全新体验

    JavaBean(EJB) 3.0 全新体验 JavaBean(EJB) 3.0 是Java EE的一种规范,提供了基于组件的编程模型,可以使开发者快速、高效地构建分布式、可维护和安全的应用程序。下面我们介绍如何使用JavaBean(EJB) 3.0构建应用程序。 步骤一:定义JavaBean(EJB) JavaBean(EJB) 是一个Java类,用于封装…

    database 2023年5月21日
    00
  • Redis数据结构及相应的命令

      Redis可以存储键(key)与5种不同类型值(value)之间的映射,5中不同类型的值分别为字符串(string),列表(list),散列(hash),集合(set)和有序集合(sorted set)等5种数据结构。有一部分Redis命令对于这5种结构是通用的,比如DEL、TYPE、RENAME等,但也有一部分Redis命令只能对特定的一种或者两种结构…

    Redis 2023年4月14日
    00
  • .NET程序性能监控系统Elastic AMP的使用方法

    .NET程序性能监控系统Elastic AMP的使用方法 1. Elastic AMP是什么? Elastic AMP(Application Performance Management)是一个开源的.NET程序性能监控解决方案,它适用于Web应用程序、Windows服务、消息服务等各种.NET应用程序。 通过Elastic AMP,您可以轻松地分析应用程…

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