.net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...
點擊上方“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??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 和 聚合函數綜合使用,能實現更加復雜的統計功能。往期面試題:001期~180期匯總
先看第1個場景
在下表score(sex=1為男,sex=0為女)中,統計有多少個男生和女生以及男女生及格的各有多少個。
SQL:
?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:
?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。
往期面試題:001期~180期匯總
用一個示例演示,還是表score:
使用IF函數:
可以看出,在一些場景中,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這時候,需要改寫成下面的形式:
--?返回結果:nullSELECT?IFNULL(price,0)?price?FROM?goods?WHERE?name='aaa';
在實際應用中,如果你確定where條件的值一定存在,使用前者就可以了,否則要用后者。
IFNULL函數也可以結合聚合使用,例如:
--?返回結果:0SELECT?IFNULL(SUM(price),0)?FROM?goods?WHERE?status=3;
其他,AVG、COUNT等用同樣方式處理,而且,無論where條件存在不存在,結果都是會返回0的。
END
來源:blog.csdn.net/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消息中間件,面試能問寫什么?
與其在網上拼命找題??不如馬上關注我們~
總結
以上是生活随笔為你收集整理的.net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax返回值怎么取出来_螺丝断孔里了,
- 下一篇: spring api 中文_Spring