沃梦达 / IT编程 / 数据库 / 正文

Oracle中case when函数的用法

当我们需要在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函数的用法