日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2025/3/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方“Java面試題精選”,關(guān)注公眾號

面試刷圖,查缺補漏

>>號外:往期面試題,10篇為一個單位歸置到本公眾號菜單欄->面試題,有需要的歡迎翻閱

階段匯總集合:001期~180期匯總,方便閱讀(增加設(shè)計模式)

前言

在眾多SQL中,統(tǒng)計型SQL絕對是讓人頭疼的一類,之所以如此,是因為這種SQL中必然有大量的判讀對比。而條件判斷函數(shù)就是應(yīng)對這類需求的利器。本文重點總結(jié)CASE WHEN、IF、IFNULL三種函數(shù)。

1 CASE WHEN

Case when語句能在SQL語句中織入判斷邏輯,類似于Java中的if else語句。

CASE WHEN語句分為簡單函數(shù)和條件表達式。

1、簡單函數(shù)

CASE?字段?WHEN?預期值?THEN?結(jié)果1?ELSE?結(jié)果2?END

如果字段值等于預期值,則返回結(jié)果1,否則返回結(jié)果2。

下面通過一個簡單的示例來看一下具體用法。

表score:
場景:在score表中,sex為1表示男性,sex=0表示女性,查詢時轉(zhuǎn)換成漢字顯示。

SQL語句:

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

結(jié)果:2、條件表達式

CASE的簡單函數(shù)使用簡便,但無法應(yīng)對較為復雜的場景,這就需要用到條件表達式了,其語法結(jié)構(gòu)如下:

CASE?
?WHEN?condition?THEN?result1??ELSE?result2
END

解釋一下,語句中的condition是條件判斷,如果該判斷結(jié)果為true,那么CASE語句將返回result,否則返回result2,如果沒有ELSE,則返回null。CASE與END之間可以有多個WHEN…THEN…ELSE語句。END表示CASE語句結(jié)束。

場景:score 大于等于90為優(yōu)秀,80-90為良好,60-80為及格,小于60為不及格,用SQL語句統(tǒng)計出每個學生的成績級別。

SQL:

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

結(jié)果:3、綜合使用

CASE WHEN 和 聚合函數(shù)綜合使用,能實現(xiàn)更加復雜的統(tǒng)計功能。往期面試題:001期~180期匯總

先看第1個場景

在下表score(sex=1為男,sex=0為女)中,統(tǒng)計有多少個男生和女生以及男女生及格的各有多少個。
SQL:

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

結(jié)果:
再看第2個場景
將上面的score表轉(zhuǎn)換為下面形式:
SQL:

SELECT?
?name,
?MAX(CASE?course?WHEN?'語文'?THEN?score?ELSE?0?END)?AS?'語文',
?max(CASE?course?WHEN?'數(shù)學'?THEN?score?ELSE?0?END)?AS?'數(shù)學',
?max(CASE?course?WHEN?'英語'?THEN?score?ELSE?0?END)?AS?'英語',
?AVG(score)?AS?'平均成績'
FROM?score?GROUP?BY?name;

結(jié)果如下:

2 IF

IF函數(shù)也能通過判斷條件來返回特定值,它的語法如下:

IF(expr,result_true,result_false)

expr是一個條件表達式,如果結(jié)果為true,則返回result_true,否則返回result_false。

往期面試題:001期~180期匯總

用一個示例演示,還是表score:
使用IF函數(shù):

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

可以看出,在一些場景中,IF函數(shù)和CASE WHEN是有同樣效果的,前者相對簡單,后者能應(yīng)對更復雜的判斷。

另外,IF函數(shù)還可以和聚合函數(shù)結(jié)合,例如查詢班級男生女生分別有多少人:

SELECT?COUNT(IF(sex=1,1,NULL))?男生人數(shù),COUNT(IF(sex=0,1,NULL))女生人數(shù)?FROM?students
在這里插入圖片描述

3 IFNULL

在Java程序中調(diào)用sql語句時,如果返回結(jié)果是null,是非常容易引發(fā)一些意外情況的。
因此,我們希望在SQL中做一些處理,如果查詢結(jié)果是null,就轉(zhuǎn)換為特定的值,這就要用到Mysql中IFNULL函數(shù)。

首先SQL一般寫法是這樣的:

SELECT??price?FROM?goods?WHERE?name='light';

使用IFNULL改寫一下:

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

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

--?返回結(jié)果:nullSELECT IFNULL(price,0) price FROM goods WHERE name='aaa';12

這時候,需要改寫成下面的形式:

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

在實際應(yīng)用中,如果你確定where條件的值一定存在,使用前者就可以了,否則要用后者。

IFNULL函數(shù)也可以結(jié)合聚合使用,例如:

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

其他,AVG、COUNT等用同樣方式處理,而且,無論where條件存在不存在,結(jié)果都是會返回0的。

END

來源:blog.csdn.net/mu_wind/article/details/93976316

十期推薦

【181期】HashMap 面試二十一問!

【182期】SpringCloud常見面試題(2020最新版)

【183期】面試官:線上服務(wù)平均響應(yīng)時間太長,怎么排查?

【184期】SQL數(shù)據(jù)庫面試題以及答案(50例題)

【185期】面試官:你能說說 Synchronized實現(xiàn)對象鎖的兩種方式以及它的原理嗎?

【186期】一口氣說出 Synchronized 同步方法的八種使用場景

【187期】出現(xiàn)幾率比較大的Redis面試題(含答案)

【188期】面試官:delete、truncate、drop的區(qū)別有哪些,該如何選擇

【189期】delete后加 limit是個好習慣么

【190期】MQ消息中間件,面試能問寫什么?

與其在網(wǎng)上拼命找題??不如馬上關(guān)注我們~

總結(jié)

以上是生活随笔為你收集整理的.net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。