美文网首页
CASE 子句

CASE 子句

作者: SingleDiego | 来源:发表于2021-08-16 22:44 被阅读0次

SQLite 的 CASE 表达式会根据给定的条件计算结果,并把计算结果返回成一个指定的列。CASE 表达式类似于 IF-THEN-ELSE 这类语法。

您可以在任何语句中使用 CASE 表达式。如:WHEREORDER BYHAVINGSELECT 语句,也可以在 SELECTUPDATEDELETE 使用。

SQLite 提供了两种形式的 CASE 表达式:简单模式 CASE 和搜索模式 CASE






简单模式 CASE

简单模式 CASE 表达式将需要比较的项目与一个表达式列表进行比较以返回结果。以下是简单 CASE 表达式的语法:

CASE case_expression
     WHEN when_expression_1 THEN result_1
     WHEN when_expression_2 THEN result_2
     ...
     [ ELSE result_else ] 
END

我们来看一个实例,假设有这样一张 customer 表。

ID NAME COUNTRY
1 Tom USA
2 Wang China
3 Ono Japan
4 Tony UK
5 Lin China

我打算用一个表达式把客户根据国籍来分类,China 的标记为国内 Domestic,其它的标记为 Foreign

表达式如下:

SELECT ID, NAME, COUNTRY,
CASE COUNTRY 
    WHEN 'China' THEN 'Domestic' 
    ELSE 'Foreign' 
    END CustomerGroup
FROM customer
ORDER BY CustomerGroup;

执行后得到的新表:

ID NAME COUNTRY CustomerGroup
2 Wang China Domestic
5 Lin China Domestic
1 Tom USA Foreign
3 Ono Japan Foreign
4 Tony UK Foreign






搜索模式 CASE

简单模型下的 CASE 只会和表达式列表给定的值作是否相等的比较,搜索模式的 CASE 则允许使用更复杂的运算符号。

看个例子,有一张 student 表,我打算按分数来确定学生的等级。

ID NAME SCORE
1 Tom 80
2 Wang 60
3 Ono 50
4 Tony 90
5 Lin 70

表达式如下:

SELECT ID, NAME, SCORE,
CASE 
    WHEN SCORE >= 80 THEN 'A' 
    WHEN SCORE < 80 AND SCORE >= 60 THEN 'B' 
    ELSE 'C' 
    END level
FROM student
ORDER BY level;

得到一张新表:

ID NAME SCORE level
1 Tom 80 A
4 Tony 90 A
2 Wang 60 B
5 Lin 70 B
3 Ono 50 C






使用 CASE 自定义排序

CASE 子句的另一个有趣的用法就是用来自定义排序。

假设有一张学生表,我想把学生等级按 “甲、乙、丙、丁” 的顺序来排序。

ID NAME level
1 Tom
2 Wang
3 Ono
4 Tony

直接使用 ORDER BY 语句显然不行,这里我们用 CASE 语句来生成一个新列来辅助排序。

SELECT ID, NAME, level FROM student
ORDER BY 
    CASE level
        WHEN '甲' THEN 1 
        WHEN '乙' THEN 2 
        WHEN '丙' THEN 3 
        WHEN '丁' THEN 4 
        END;

这样我们就得自定义顺序的新表。

相关文章

  • CASE 子句

    SQLite 的 CASE 表达式会根据给定的条件计算结果,并把计算结果返回成一个指定的列。CASE 表达式类似于...

  • SQL操作指南七(CASE表达式)

    CASE表达式的语法CASE表达式的语法分为简单CASE表达式和搜索CASE表达式。 WHEN 子句中的<判断表达...

  • MICK-SQL进阶教程 1.1 CASE表达式

    1.1 CASE表达式 表达式概述 在发现为真的 WHEN 子句时, CASE 表达式的真假值判断就会中止 所有分...

  • ORDER BY 子句中的 CASE WHEN THEN

    THEN 后跟数字 对于SQL: 这里可以理解为分组排序,比如说,学生排队,凡是姓张的,我们给他们贴个标签“1”,...

  • Two Tips of switch

    0x01 switch语句的执行流 switch语句在没有break;语句的情况下,逐一执行每个case子句。示例...

  • SQL进阶教程之1.1 case when语句

    case when语句书写注意点 统一数据类型——同一字段不能出现不同数据类型 不要忘记end 养成写子句else...

  • mysql高级增删改查

    一、高级查询 select 子句 [from 子句] [where 子句] [group by子句] [havin...

  • 二:SQL查询语言

    ①、查询语句可以分为: select 子句、from 子句、where 子句、order by 子句、group ...

  • MySQL学习day-34:子查询与分页

    一、子查询 可以将子查询放在许多的 SQL 子句中,包括:WHERE 子句; HAVING 子句;FROM 子句。...

  • SQL 学习笔记

    基础 SELECT 书写顺序 SELECT 子句 → 2. FROM 子句 → 3. WHERE 子句 → 4...

网友评论

      本文标题:CASE 子句

      本文链接:https://www.haomeiwen.com/subject/yklvbltx.html