SQL中得CASE及其使用

  CASE 表达式是从 SQL-92 标准开始被引入的。CASE WHEN语句是SQL中的条件表达式,它提供了一种简单的方式来根据不同的条件执行不同的操作。在实际情境中,我们可能需要在数据查询中进行一些简单的转换或计算。CASE WHEN就可以方便地帮助我们完成这些工作。在 CASE 表达式里,可以使用 BETWEEN 、LIKE和 < 、> 等便利的谓词组合,以及能嵌套子查询的 IN 和 EXISTS 谓词。

  CASE得使用方法主要分为以下两类:

  1:普通case函数:

CASE  <表达式>
   WHEN <值1> THEN <操作>
   WHEN <值2> THEN <操作>
   ...
   ELSE <操作>
END 

  2:搜索case函数

CASE
    WHEN <条件1> THEN <命令>
    WHEN <条件2> THEN <命令>
    ...
    ELSE commands
END

  这上述语法中,我们首先使用CASE关键字开头,然后根据不同的条件使用WHEN关键字,并在每个条件后面指定结果。如果所有条件都不满足,就返回ELSE子句中指定的结果。最后使用END关键字闭合该CASE语句。需要注意的是,条件和结果都可以是任何SQL表达式

  例子1:

使用CASE WHEN语句进行数据分组,例如,我们想要基于年龄分组,分成18到25岁、26到35岁、36到45岁和45岁以上等四组。可以使用以下语句:

SELECT
COUNT(*) AS people_count,
CASE
WHEN age >= 18 AND age <= 25 THEN '18-25'
WHEN age > 25 AND age <= 35 THEN '25-35'
WHEN age > 35 AND age <= 45 THEN '36-45'
ELSE '45+'
END AS age_group
FROM people
GROUP BY age_group;

这个查询可以对people表中的人员按照不同的年龄段进行分组,并计算在每个组中人数的总和

  例子2:

一条SQL实现不同条件的统计

SELECT
    pref_name AS '县名',
    SUM( CASE WHEN sex=1 THEN population ELSE 0 END ) AS '' 
    SUM( CASE WHEN sex=2 THEN population ELSE 0 END ) AS '' 
FROM poptlb
GROUP By pref_name

  结果如下图所示:

 

  例子3:

使用搜索的case函数进行分条件修改(此处不能使用简单case函数,因为简单case函数不能判断带范围的条件)

update t_salary
 set 
 salary = 
 (
  case 
   when salary < 3000 then salary + salary * 0.2
   when salary >= 3000 then salary + salary * 0.08
   else salary 
  end
 )

  例子4:

检查表中字段值是否一致

select name,
(
 case 
 when desciption in(select description from t_user2) then '一致'
 else '不一致'
 end
) 比较结果
from t_user1

  例子5:行转列:首先:将表中数据按照每个学生姓名 、科目、成绩进行排序,数据如下:

// 使用普通case函数
SELECT NAME,
 max( CASE class WHEN '语文' THEN grade ELSE 0 END ) 语文,
 max( CASE class WHEN '数学' THEN grade ELSE 0 END ) 数学,
 max( CASE class WHEN '英语' THEN grade ELSE 0 END ) 英语 
FROM
 t_source 
GROUP BY
NAME

// 使用搜索case函数
SELECT NAME,
 max( CASE  WHEN class = '语文' THEN grade ELSE 0 END ) 语文,
 max( CASE  WHEN class =  '数学' THEN grade ELSE 0 END ) 数学,
 max( CASE  WHEN class = '英语' THEN grade ELSE 0 END ) 英语 
FROM
 t_source 
GROUP BY
NAME

  转换结果如下:

CASE WHEN语句是SQL中一种非常重要的条件表达式。在实际情况中,我们可能需要根据某种规则对数据进行转换、分类、计算等操作。在这种情况下,可以使用CASE WHEN语句非常方便地完成这些操作。

本文参考得是以下两篇优秀得文章,在此记录两者得观点一作个人日常学习所用。

参考:SQL中CASE WHEN用法详解

参考:三分钟搞懂SQL的Case函数

 

posted @ 2023-09-03 22:25  syk_ahhf  阅读(70)  评论(0)    收藏  举报