前言

在众多SQL中,统计型SQL绝对是让人头疼的一类,之所以如此,是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHENIFIFNULL三种函数。

1 CASE WHEN

Case when语句能在SQL语句中织入判断逻辑,类似于Java中的if else语句。

CASE WHEN语句分为简单函数和条件表达式。

1、简单函数

CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END

如果字段值等于预期值,则返回结果1,否则返回结果2。

下面通过一个简单的示例来看一下具体用法。

表score:

场景:在score表中,sex为1表示男性,sex=0表示女性,查询时转换成汉字显示。

SQL语句

SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score

结果

2、条件表达式

CASE的简单函数使用简便,但无法应对较为复杂的场景,这就需要用到条件表达式了,其语法结构如下:

CASE WHEN condition THEN result1  ELSE result2
END

解释一下,语句中的condition是条件判断,如果该判断结果为true,那么CASE语句将返回result,否则返回result2,如果没有ELSE,则返回null。CASE与END之间可以有多个WHEN…THEN…ELSE语句。END表示CASE语句结束。

场景:score 大于等于90为优秀,80-90为良好,60-80为及格,小于60为不及格,用SQL语句统计出每个学生的成绩级别。

SQL:

SELECT name,score,(CASE WHEN score>=90 THEN '优秀' WHEN score>=80 THEN '良好' WHEN score>=60 THEN '及格' ELSE '不及格' END) level
FROM score

结果

3、综合使用

CASE WHEN 和 聚合函数综合使用,能实现更加复杂的统计功能。

先看第1个场景

在下表score(sex=1为男,sex=0为女)中,统计有多少个男生和女生以及男女生及格的各有多少个。

SQL:

SELECT SUM(CASE WHEN sex=0 THEN 1 ELSE 0 END) AS 女生人数,SUM(CASE WHEN sex=1 THEN 1 ELSE 0 END) AS 男生人数,SUM(CASE WHEN score>=60 AND sex=0 THEN 1 ELSE 0 END) 男生及格人数,SUM(CASE WHEN score>=60 AND sex=1 THEN 1 ELSE 0 END) 女生及格人数
FROM score;

结果

再看第2个场景

将上面的score表转换为下面形式:

SQL:

SELECT name,MAX(CASE course WHEN '语文' THEN score ELSE 0 END) AS '语文',max(CASE course WHEN '数学' THEN score ELSE 0 END) AS '数学',max(CASE course WHEN '英语' THEN score ELSE 0 END) AS '英语',AVG(score) AS '平均成绩'
FROM score GROUP BY name;

结果如下:

2 IF

IF函数也能通过判断条件来返回特定值,它的语法如下:

IF(expr,result_true,result_false)

expr是一个条件表达式,如果结果为true,则返回result_true,否则返回result_false。

用一个示例演示,还是表score:

使用IF函数:

SELECT name,IF(sex=1,'男','女')sex FROM students;

可以看出,在一些场景中,IF函数和CASE WHEN是有同样效果的,前者相对简单,后者能应对更复杂的判断。

另外,IF函数还可以和聚合函数结合,例如查询班级男生女生分别有多少人:

SELECT COUNT(IF(sex=1,1,NULL)) 男生人数,COUNT(IF(sex=0,1,NULL))女生人数 FROM students

3 IFNULL

在Java程序中调用sql语句时,如果返回结果是null,是非常容易引发一些意外情况的。

因此,我们希望在SQL中做一些处理,如果查询结果是null,就转换为特定的值,这就要用到Mysql中IFNULL函数。

首先SQL一般写法是这样的:

SELECT  price FROM goods WHERE name='light';

使用IFNULL改写一下:

SELECT IFNULL(price,0) price FROM goods WHERE name='light';

但使用IFNULL语句,如果where条件中的name值是不存在的,那么仍将返回null,例如:

-- 返回结果:null
SELECT IFNULL(price,0) price FROM goods WHERE name='aaa';

这时候,需要改写成下面的形式:

-- 返回结果:0
SELECT IFNULL((SELECT price FROM goods WHERE name='aaa'),0) price;

在实际应用中,如果你确定where条件的值一定存在,使用前者就可以了,否则要用后者。

IFNULL函数也可以结合聚合使用,例如:

-- 返回结果:0
SELECT IFNULL(SUM(price),0) FROM goods WHERE status=3;

其他,AVGCOUNT等用同样方式处理,而且,无论where条件存在不存在,结果都是会返回0的。

作者:云深i不知处
原文链接:https://blog.csdn.net/mu_wind/article/details/93976316

.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解相关推荐

  1. .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  2. mysql 条件 函数_mysql 函数 时间函数,数学函数,字符串函数,条件判断函数

    =========================================== mysql 相关函数 ============================================= ...

  3. Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  4. sql语句条件判断函数(流程控制函数)

    在查询语句中,我们可能会遇到使用条件判断函数的情况,今天记录一下条件判断函数的使用. 名称 具体作用 IF(EXPR ,V1,V2) 如果满足条件返回第一个值,否则返回第二个 IFNULL(V1,V2 ...

  5. html if函数,IF条件判断函数还不会就out了,IF函数七种条件判断用法都在这

    IF函数是工作中最常用的函数之一,因为if函数大多是搭配其他函数一起使用,很多人会对这个函数感叹非常难,今天我们来讲解一下if函数的7个常见用法,学完你就算是真正掌握了这个函数了. 1.单条件判断返回 ...

  6. if函数or和and混用 php,IF函数与逻辑函数And、OR嵌套运用,让多条件判断变得更加简单...

    IF函数相信许多朋友都已经见到过了,IF函数在Excel函数当中属于非常使用的条件判断类函数,利用这个函数我们可以实现非常高效的许多操作. 但是许多朋友对于这个函数却不是特别的会用,因为会涉及逻辑思维 ...

  7. R语言is.na函数实战(删除、替换、统计、条件判断等)

    R语言is.na函数实战(删除.替换.统计.条件判断等) 目录 R语言is.na函数实战(删除.替换.统计.条件判断等) #NA.NaN.Nu

  8. mysql 属性函数_4-MySQL函数(字段处理函数条件判断函数)

    一.字段处理函数 字符串处理函数: concat(field1,field2 -- ) substr(str,pos,len) replace(str,old_str,new_str)[Hive:re ...

  9. 编写函数 int fac(int x)计算 x!的值。在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac)

    编写函数 int fac(int x)计算 x!的值.在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac) 递归: #includ ...

最新文章

  1. 23-26 Python File方法、OS文件/目录方法、异常处理、内置函数
  2. 动态规划—01背包问题
  3. 数据库性能优化—MySQL单表最大记录数超过多少时性能会严重下降
  4. Linux 多用户和多用户边界
  5. html+css做的丝带标签
  6. 关于苹果与摄影的事。
  7. 前端每日实战:98# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的绿猪
  8. node mysql菜鸟教程_Node.js 路由
  9. Closeness Centrality的计算方法
  10. iOS12适配适配iPhone XR/iPhone XS Max
  11. mysql中文本类型的长度限制_关于数据库:MySQL类型文本的最大长度
  12. 【考研】哈尔滨工业大学计算机考研854复习资料
  13. MAC word2015 插入罗马字母
  14. DP转HDMI/VGA方案设计电路图参考|AG6320参考电路原理图PCB电路图
  15. leetcode643. 子数组最大平均数 I
  16. 共享充电宝还有市场嘛?
  17. 推荐一款学习app:Enki
  18. 基于浏览器的http普通请求与ajax请求
  19. cocos cretor shader effect-the book of shader前言
  20. 三天一题-07-快速排序

热门文章

  1. 单元测试原来是这样的呼
  2. 20111228_给窗体设置默认输入法
  3. 310. Minimum Height Trees
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第32篇]基于博弈的证明和基于模拟的证明
  5. CF 1174 D. Ehab and the Expected XOR Problem 异或技巧
  6. POJ 1703 Find them, Catch them 种类并查集
  7. idea中连接mysql插入成功数据 在navicat中刷新表格没有数据_MySQL入门简记
  8. 189A. Cut Ribbon
  9. JAVA怎么将整数反转_【leetcode刷题】[简单]7.反转整数(reverse integer)-java
  10. export function函数传参_从底层看前端(七)—— JavaScript到底有多少种函数?