做影视网站侵权,网站建设基础流程摘要,十种网络推广的方法,企业网站优化设计应该把什么放在首位前言在众多SQL中#xff0c;统计型SQL绝对是让人头疼的一类#xff0c;之所以如此#xff0c;是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHEN、IF、IFNULL三种函数。1 CASE WHENCase when语句能在SQL语句中织入判断逻辑…前言在众多SQL中统计型SQL绝对是让人头疼的一类之所以如此是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHEN、IF、IFNULL三种函数。1 CASE WHENCase when语句能在SQL语句中织入判断逻辑类似于Java中的if else语句。CASE WHEN语句分为简单函数和条件表达式。1、简单函数CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END如果字段值等于预期值则返回结果1否则返回结果2。下面通过一个简单的示例来看一下具体用法。表score场景在score表中sex为1表示男性sex0表示女性查询时转换成汉字显示。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 score90 THEN 优秀 WHEN score80 THEN 良好 WHEN score60 THEN 及格 ELSE 不及格 END) level
FROM score结果3、综合使用CASE WHEN 和 聚合函数综合使用能实现更加复杂的统计功能。先看第1个场景在下表scoresex1为男sex0为女中统计有多少个男生和女生以及男女生及格的各有多少个。SQL:SELECT SUM(CASE WHEN sex0 THEN 1 ELSE 0 END) AS 女生人数,SUM(CASE WHEN sex1 THEN 1 ELSE 0 END) AS 男生人数,SUM(CASE WHEN score60 AND sex0 THEN 1 ELSE 0 END) 男生及格人数,SUM(CASE WHEN score60 AND sex1 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 IFIF函数也能通过判断条件来返回特定值它的语法如下IF(expr,result_true,result_false)expr是一个条件表达式如果结果为true则返回result_true否则返回result_false。用一个示例演示还是表score使用IF函数SELECT name,IF(sex1,男,女)sex FROM students;可以看出在一些场景中IF函数和CASE WHEN是有同样效果的前者相对简单后者能应对更复杂的判断。另外IF函数还可以和聚合函数结合例如查询班级男生女生分别有多少人SELECT COUNT(IF(sex1,1,NULL)) 男生人数,COUNT(IF(sex0,1,NULL))女生人数 FROM students3 IFNULL在Java程序中调用sql语句时如果返回结果是null是非常容易引发一些意外情况的。因此我们希望在SQL中做一些处理如果查询结果是null就转换为特定的值这就要用到Mysql中IFNULL函数。首先SQL一般写法是这样的SELECT price FROM goods WHERE namelight;使用IFNULL改写一下SELECT IFNULL(price,0) price FROM goods WHERE namelight;但使用IFNULL语句如果where条件中的name值是不存在的那么仍将返回null例如-- 返回结果null
SELECT IFNULL(price,0) price FROM goods WHERE nameaaa;这时候需要改写成下面的形式-- 返回结果0
SELECT IFNULL((SELECT price FROM goods WHERE nameaaa),0) price;在实际应用中如果你确定where条件的值一定存在使用前者就可以了否则要用后者。IFNULL函数也可以结合聚合使用例如-- 返回结果0
SELECT IFNULL(SUM(price),0) FROM goods WHERE status3;其他AVG、COUNT等用同样方式处理而且无论where条件存在不存在结果都是会返回0的。作者云深i不知处原文链接https://blog.csdn.net/mu_wind/article/details/93976316