有这样一道面试题:

一张表数据如下 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语句相关推荐

  1. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

  2. 解决数据倾斜一:RDD执行reduceByKey或则Spark SQL中使用group by语句导致的数据倾斜

    一:概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...

  3. Linux之shell中的case in语句

    文章目录 shell中的case in 语句 1.case in 的用法 2.case in和正则表达式 shell中的case in 语句 1.case in 的用法 格式: 1 | case ex ...

  4. SQL中的条件判断语句(case when zhen)用法

    简介: case具有两种格式.简单case函数和case搜索函数.这两种方式,可以实现相同的功能.简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式.还有 ...

  5. SQL中的case when then else end用法

    2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...

  6. SQL中的CASE WHEN用法

    SQL中Case的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  7. sql中的case when

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.              例如,下面的语句显示中文年月           sel ...

  8. SQL中的CASE使用方法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex          WHEN '1' THEN '男'          WHEN '2' THEN ...

  9. [转]SQL中的case when then else end用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女' ELSE '其他' END -- ...

最新文章

  1. AS400: 对象属性Domain和State
  2. vue学习之二ECMAScript6标准
  3. Windows 10系统下 MySql 5.7 my.ini 位置
  4. GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记
  5. 争议激烈!新晋斯隆奖得主发布最新研究,网友:结果成疑,文章结论和实验结果完全相反...
  6. JAVA-date(计算时间差)
  7. 想要构建现代化数据中心?交给戴尔第14代PowerEdge服务器解决吧!
  8. JAVA/JNI的jstring转换为char*
  9. oozie ErrorCode含义
  10. 利用JS获取用户当前ip地址
  11. 微信小程序的弹窗提示
  12. android自定义鼠标指针,修改Android系统的鼠标光标
  13. shell脚本shc加密解密
  14. 配置网络地址转换NAT技术实验
  15. 华为笔记本linux双系统,真的有必要吗?华为笔记本搭载双系统
  16. 2022年乡村医生考试精选复习题及答案
  17. PyQT之多窗口切换
  18. 美国诚实签经验贴汇总
  19. 如何利用Goby进行外围打点
  20. android x86耗电,X86挑战ARM 29项测试揭秘鲜为人知的功耗

热门文章

  1. Android Q适配
  2. Halcon算子:min_max_gray和gray_histo的区别
  3. 光伏电站清扫机器人_光伏智能清扫机器人
  4. 计算各种图形的周长(接口与多态)_JAVA
  5. 区域内点的个数_JAVA
  6. 数据库设计的三大范式、BCNF、4NF
  7. 《深度探索C++对象模型》--1 关于对象
  8. 【Linux】22.当前运行的docker修改环境后,想在本地保存为镜像的方法
  9. Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G
  10. Effective Java读书笔记七:泛型(部分章节需要重读)