CASE 子句

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;

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,610评论 1 24
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 15,205评论 1 180
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,317评论 2 89
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,896评论 28 54
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 4,115评论 0 5

友情链接更多精彩内容