mysqllimit加判断条件_【195期】MySQL中的条件判断函数
CASEWHEN、I。。。
点击上⽅“Java⾯试题精选”,关注
⾯试刷图,查缺补漏
>>号外:往期⾯试题,10篇为⼀个单位归置到本菜单栏->⾯试题,有需要的欢迎翻阅
阶段汇总集合:001期~180期汇总,⽅便阅读(增加设计模式)
前⾔
在众多SQL中,统计型SQL绝对是让⼈头疼的⼀类,之所以如此,是因为这种SQL中必然有⼤量的判读对⽐。⽽条件判断函数就是应对这类需求的利器。本⽂重点总结CASE WHEN、IF、IFNULL三种函数。
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
静态网页制作cssWHEN 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
border网页设计WHEN score>=90 THEN '优秀'
WHEN score>=80 THEN '良好'
WHEN score>=60 THEN '及格'
ELSE '不及格' END) level
FROM score
结果:3、综合使⽤
CASE WHEN 和 聚合函数综合使⽤,能实现更加复杂的统计功能。往期⾯试题:001期~180期汇总
先看第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函数也能通过判断条件来返回特定值,它的语法如下:
mysql面试题汇总
IF(expr,result_true,result_false)
expr是⼀个条件表达式,如果结果为true,则返回result_true,否则返回result_false。往期⾯试题:001期~180期汇总
⽤⼀个⽰例演⽰,还是表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,例如:
-- 返回结果:nullSELECT IFNULL(price,0) price FROM goods WHERE name='aaa';12
这时候,需要改写成下⾯的形式:
-- 返回结果:null
SELECT IFNULL(price,0) price FROM goods WHERE name='aaa';
在实际应⽤中,如果你确定where条件的值⼀定存在,使⽤前者就可以了,否则要⽤后者。
IFNULL函数也可以结合聚合使⽤,例如:
-- 返回结果:0
SELECT IFNULL(SUM(price),0) FROM goods WHERE status=3;
其他,AVG、COUNT等⽤同样⽅式处理,⽽且,⽆论where条件存在不存在,结果都是会返回0的。END
来源:blog.csdn/mu_wind/article/details/93976316
⼗期推荐
【181期】HashMap ⾯试⼆⼗⼀问!
【182期】SpringCloud常见⾯试题(2020最新版)
【183期】⾯试官:线上服务平均响应时间太长,怎么排查?
【184期】SQL数据库⾯试题以及答案(50例题)
【185期】⾯试官:你能说说 Synchronized实现对象锁的两种⽅式以及它的原理吗?
【186期】⼀⼝⽓说出 Synchronized 同步⽅法的⼋种使⽤场景
【187期】出现⼏率⽐较⼤的Redis⾯试题(含答案)
【188期】⾯试官:delete、truncate、drop的区别有哪些,该如何选择
【189期】delete后加 limit是个好习惯么
【190期】MQ消息中间件,⾯试能问写什么?
encoding什么意思与其在⽹上拼命题? 不如马上关注我们~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。