SQL中的CASE WHEN语句
有这样一道面试题:
一张表数据如下 1900-1-1 胜 1900-1-1 胜 1900-1-1 负 1900-1-2 胜 1900-1-2 胜 写出一条SQL语句,使检索结果如下: 胜 负 1900-1-1 2 1 1900-1-2 2 0
我随手建了这样一个表:
create table test(Date varchar(50) null, Result varchar(50) null)
并将上面的数据都插入到表中。
经过一番尝试和修改,终于得到了答案:
select distinct Date, sum(case Result when '胜' then 1 else 0 end) as '胜', sum(case Result when '负' then 1 else 0 end) as '负' from test group by date
这里我要说的,其实是SQL中case when的用法。它在普通的SQL语句中似乎并不常见,我本人以前也没在实际项目中使用过。遇到类似问题,往往通过代码或多条SQL语句实现。或者是如下这种丑陋的SQL,并且还伴随着很多潜在的BUG(如,当没有‘负’时)。
select a.date,a.a1 胜,b.b1 负 from (select date,count(date) a1 from test where Result ='胜' group by date) a, (select date,count(date) b1 from test where Result ='负' group by date) b where a.date=b.date
我们不妨来复习一下CASE WHEN的语法。
CASE WHEN有两种用法,一种是类似上面例子中那样的简单CASE函数:
CASE resultWHEN '胜' THEN 1 WHEN '负' THEN 2 ELSE 0 END
还有一种是CASE搜索函数:
CASE WHEN result='胜' THEN 1 WHEN result='负' THEN 2 ELSE 0 END
其中result='胜'可以替换为其他条件表达式。如果有多个CASE WHEN表达式符合条件,将只返回第一个符合条件的子句,其余子句将被忽略。
用CASE WHEN语句可以简化我们平时工作中遇到的很多问题。如性别在表中存的是数字1、2,但是希望查询出来男、女时,可以这样:
select (case Gender when 1 then '男' when 2 then '女' else '其他' end) as Gender from Table1
是不是很强大呢?
SQL中的CASE WHEN语句相关推荐
- mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法
需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性, CASE ...
- 解决数据倾斜一:RDD执行reduceByKey或则Spark SQL中使用group by语句导致的数据倾斜
一:概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...
- Linux之shell中的case in语句
文章目录 shell中的case in 语句 1.case in 的用法 2.case in和正则表达式 shell中的case in 语句 1.case in 的用法 格式: 1 | case ex ...
- SQL中的条件判断语句(case when zhen)用法
简介: case具有两种格式.简单case函数和case搜索函数.这两种方式,可以实现相同的功能.简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式.还有 ...
- SQL中的case when then else end用法
2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...
- SQL中的CASE WHEN用法
SQL中Case的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...
- sql中的case when
sql语言中有没有类似C语言中的switch case的语句?? 没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 sel ...
- SQL中的CASE使用方法
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN ...
- [转]SQL中的case when then else end用法
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女' ELSE '其他' END -- ...
最新文章
- AS400: 对象属性Domain和State
- vue学习之二ECMAScript6标准
- Windows 10系统下 MySql 5.7 my.ini 位置
- GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记
- 争议激烈!新晋斯隆奖得主发布最新研究,网友:结果成疑,文章结论和实验结果完全相反...
- JAVA-date(计算时间差)
- 想要构建现代化数据中心?交给戴尔第14代PowerEdge服务器解决吧!
- JAVA/JNI的jstring转换为char*
- oozie ErrorCode含义
- 利用JS获取用户当前ip地址
- 微信小程序的弹窗提示
- android自定义鼠标指针,修改Android系统的鼠标光标
- shell脚本shc加密解密
- 配置网络地址转换NAT技术实验
- 华为笔记本linux双系统,真的有必要吗?华为笔记本搭载双系统
- 2022年乡村医生考试精选复习题及答案
- PyQT之多窗口切换
- 美国诚实签经验贴汇总
- 如何利用Goby进行外围打点
- android x86耗电,X86挑战ARM 29项测试揭秘鲜为人知的功耗
热门文章
- Android Q适配
- Halcon算子:min_max_gray和gray_histo的区别
- 光伏电站清扫机器人_光伏智能清扫机器人
- 计算各种图形的周长(接口与多态)_JAVA
- 区域内点的个数_JAVA
- 数据库设计的三大范式、BCNF、4NF
- 《深度探索C++对象模型》--1 关于对象
- 【Linux】22.当前运行的docker修改环境后,想在本地保存为镜像的方法
- Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G
- Effective Java读书笔记七:泛型(部分章节需要重读)