case 表达式作为标准SQL的用法,真的是很强大。

case 表达式分为搜索表达式和简单表达式,由于搜索表达式包含了简单表达式的所有用法,此处仅介绍搜索表达式的用法。

搜索 case 表达式的语法如下:

CASE WHEN  THEN       WHEN  THEN       WHEN  THEN       .      .      .      ELSE  END   

上述语句执行时,依次判断 when 表达式是否为真值,是则执行 then 后的语句,如果所有的 when 表达式均为假,则执行 else 后的语句。

取代小表关联

之前工作中遇到一个需求,需要将表中的某列进行转换,以得到新的列,当时采用的创建小表,然后再进行内连接的方法。

-- 1.创建临时表,然后内连接的方法 SELECT      `中端1月`.NODE_NAME,      `node_name`.STEP FROM `中端1月`  INNER JOIN `node_name` ON `中端1月` .NODE_NAME = `node_name`.NODE_NAME 

这个用法也没啥问题,就是需要多创建一个表并写入数据,步骤略微繁琐。最近学习 case 表达式的用法,发现正好可以用来完成此工作。

-- 2.使用 case 表达式的方法 SELECT      `中端1月`.NODE_NAME,      case when `中端1月`.NODE_NAME = '目标制定报告上传'   then 'A1'           when `中端1月`.NODE_NAME = '项目启动地市审核'   then 'A2'           when `中端1月`.NODE_NAME = '低端工单接收'       then 'A3'           when `中端1月`.NODE_NAME = '方案实施'          then 'A4'             when `中端1月`.NODE_NAME = '项目结束启动人审核'  then 'A5'           when `中端1月`.NODE_NAME = '项目结束地市审核'    then 'A6'           when `中端1月`.NODE_NAME = '新建中端工单'        then 'A1'           when `中端1月`.NODE_NAME = '中端工单接收'        then 'A3'           ELSE NULL      END AS STEP FROM `中端1月`  

两种写法可以得到同样的结果,运行效率差异不大。第二种写法看似代码更加复杂,但是较写法一少了建表、插入数据的步骤。

行转列

假设有下表

想转换成下面的样子,该如何写 sql 呢?

case when 表达式 + 聚合函数可以实现行转列

-- case when 实现数字列 score 行转列 select name,    sum(case when subject = '语文' then score else null end) as chinese,    sum(case when subject = '数学' then score else null end) as math,    sum(case when subject = '外语' then score else null end) as english from score group by name; +------+---------+------+---------+ | name | chinese | math | english | +------+---------+------+---------+ | 张三 |      93 |   88 |      91 | | 李四 |      87 |   90 |      77 | +------+---------+------+---------+ 2 rows in set (0.00 sec) -- case when 实现文本列 subject 行转列 select name,     max(case when subject = '语文' then subject else null end) as chinese,     max(case when subject = '数学' then subject else null end) as math,     min(case when subject = '外语' then subject else null end) as english from score group by name; +------+---------+------+---------+ | name | chinese | math | english | +------+---------+------+---------+ | 张三 | 语文    | 数学 | 外语    | | 李四 | 语文    | 数学 | 外语    | +------+---------+------+---------+ 2 rows in set (0.00 sec) 

总结:

  • 当待转换列为数字时,可以使用 sum avg max min 等聚合函数;
  • 当待转换列为文本时,可以使用 max min 等聚合函数

hive case when语法_SQL中CASE表达式的妙用相关推荐

  1. c语言switch case 空,switch语句中case为空时的意义

    switch语句中case为空时的意义 一成绩单的程序 void main() {float score; printf("input score:\n"); scanf(&quo ...

  2. 整理:C#中Expression表达式的妙用

    一.目的:通过示例了解C#中Expression表达式的作用,通过表达式和反射可以写出很优雅的代码和架构,也可以完成一些看似不可能完成的任务 二.示例: 1.通过表达式获取成员属性 定义模型: [De ...

  3. case zhen语句_SQL中的条件判断语句(case when zhen if,ifnull)用法

    三.IFNULL(expr1,expr2) 仅适用于mysql 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2.IFNULL()的返回值是数 ...

  4. python case when用法_SQL之CASE WHEN用法详解

    简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' E ...

  5. lambdapython语法_Python中lambda表达式的语法与应用

    lambda表达式常用来声明匿名函数,也就是没有名字的.临时使用的小函数,虽然也可以使用lambda表达式定义具名函数,但很少这样使用. lambda表达式常用在临时需要一个于函数的功能但又不想定义函 ...

  6. mysql rollup语法_SQL 中ROLLUP 用法

    SQL 中ROLLUP 用法 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有 ...

  7. Scala中Case Class使用详细解析

    2019独角兽企业重金招聘Python工程师标准>>> 简介   Case Class是样例类,能够被优化以用于模式匹配. 构造器中的参数如果不被声明为var的话,默认是val类型 ...

  8. JAVA语法中case语句的特性

    JAVA语法中case语句的特性: 1.case拥有穿透机制, 若case后不写break,如果命中了某个case语句步骤,下面的case结果将会同时执行.建议写完一个case后 针对break的增加 ...

  9. switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...

    switch语句:又被称之为 分支选择语句,它提供了一种更方便的方法来实现深层嵌套的if.else逻辑: switch语句先计算表达式的值,并逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表 ...

最新文章

  1. 用了 3 年 Apollo,最后我选择了 Nacos,原因不多说了
  2. 研究生再次大幅扩招!高校能否承载?教育部最新表态来了
  3. python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异
  4. JavaScript程序员必备的5个debug技巧
  5. nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
  6. 使用java来进行分词处理
  7. 老李分享:接电话扩展之uiautomator 1
  8. 黑客新技术在ATM钻洞就让其吐钱
  9. C Primer Plus (Stephen Prata 著)
  10. 关于Tuxera NTFS mac还有你不知道的用法!教程来啦!
  11. Primer C++(第5版)PDF
  12. 往年计算机二级在线查询,2012年计算机二级查询
  13. 「津津乐道播客」#301 这是一期价值3000元的当代社畜科学点餐指南
  14. 【腾讯云新知实验室】一站式提供视频解决方案
  15. 26、用户 创建用户
  16. C语言char类型的存储
  17. 联想 ideapad 300s 拆机换内存手记
  18. <OS Concepts 9th> Chap 4 线程与并发
  19. 2021年11月推荐阅读的10篇论文
  20. 法国iut计算机转专业,法国艺术留学能不能够申请转专业.docx

热门文章

  1. 【人生杂谈】宇宙/暗物质/擎天柱
  2. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (18) - 数据预取
  3. python朴素贝叶斯分布对数据的要求_统计学习方法与Python实现(三)——朴素贝叶斯法...
  4. 使用fstream在C++工程中读取文件到二维数组
  5. python3的面向对象_python3学习之面向对象
  6. Early Z Culling 优化
  7. 改进粒子系统-GPU实现
  8. Web服务器处理连接请求的四种架构方式
  9. 娱乐开源commons-email-1.x包
  10. 《深入理解OSGi:Equinox原理、应用与最佳实践》一3.4 事件监听