hive case when语法_SQL中CASE表达式的妙用
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表达式的妙用相关推荐
- c语言switch case 空,switch语句中case为空时的意义
switch语句中case为空时的意义 一成绩单的程序 void main() {float score; printf("input score:\n"); scanf(&quo ...
- 整理:C#中Expression表达式的妙用
一.目的:通过示例了解C#中Expression表达式的作用,通过表达式和反射可以写出很优雅的代码和架构,也可以完成一些看似不可能完成的任务 二.示例: 1.通过表达式获取成员属性 定义模型: [De ...
- case zhen语句_SQL中的条件判断语句(case when zhen if,ifnull)用法
三.IFNULL(expr1,expr2) 仅适用于mysql 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2.IFNULL()的返回值是数 ...
- python case when用法_SQL之CASE WHEN用法详解
简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' E ...
- lambdapython语法_Python中lambda表达式的语法与应用
lambda表达式常用来声明匿名函数,也就是没有名字的.临时使用的小函数,虽然也可以使用lambda表达式定义具名函数,但很少这样使用. lambda表达式常用在临时需要一个于函数的功能但又不想定义函 ...
- mysql rollup语法_SQL 中ROLLUP 用法
SQL 中ROLLUP 用法 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有 ...
- Scala中Case Class使用详细解析
2019独角兽企业重金招聘Python工程师标准>>> 简介 Case Class是样例类,能够被优化以用于模式匹配. 构造器中的参数如果不被声明为var的话,默认是val类型 ...
- JAVA语法中case语句的特性
JAVA语法中case语句的特性: 1.case拥有穿透机制, 若case后不写break,如果命中了某个case语句步骤,下面的case结果将会同时执行.建议写完一个case后 针对break的增加 ...
- switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...
switch语句:又被称之为 分支选择语句,它提供了一种更方便的方法来实现深层嵌套的if.else逻辑: switch语句先计算表达式的值,并逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表 ...
最新文章
- 用了 3 年 Apollo,最后我选择了 Nacos,原因不多说了
- 研究生再次大幅扩招!高校能否承载?教育部最新表态来了
- python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异
- JavaScript程序员必备的5个debug技巧
- nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
- 使用java来进行分词处理
- 老李分享:接电话扩展之uiautomator 1
- 黑客新技术在ATM钻洞就让其吐钱
- C Primer Plus (Stephen Prata 著)
- 关于Tuxera NTFS mac还有你不知道的用法!教程来啦!
- Primer C++(第5版)PDF
- 往年计算机二级在线查询,2012年计算机二级查询
- 「津津乐道播客」#301 这是一期价值3000元的当代社畜科学点餐指南
- 【腾讯云新知实验室】一站式提供视频解决方案
- 26、用户 创建用户
- C语言char类型的存储
- 联想 ideapad 300s 拆机换内存手记
- <OS Concepts 9th> Chap 4 线程与并发
- 2021年11月推荐阅读的10篇论文
- 法国iut计算机转专业,法国艺术留学能不能够申请转专业.docx
热门文章
- 【人生杂谈】宇宙/暗物质/擎天柱
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (18) - 数据预取
- python朴素贝叶斯分布对数据的要求_统计学习方法与Python实现(三)——朴素贝叶斯法...
- 使用fstream在C++工程中读取文件到二维数组
- python3的面向对象_python3学习之面向对象
- Early Z Culling 优化
- 改进粒子系统-GPU实现
- Web服务器处理连接请求的四种架构方式
- 娱乐开源commons-email-1.x包
- 《深入理解OSGi:Equinox原理、应用与最佳实践》一3.4 事件监听