.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解
前言
在眾多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 和 聚合函數綜合使用,能實現更加復雜的統計功能。
先看第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:
結果如下:
2 IF
IF函數也能通過判斷條件來返回特定值,它的語法如下:
IF(expr,result_true,result_false)expr是一個條件表達式,如果結果為true,則返回result_true,否則返回result_false。
用一個示例演示,還是表score:
使用IF函數:
可以看出,在一些場景中,IF函數和CASE WHEN是有同樣效果的,前者相對簡單,后者能應對更復雜的判斷。
另外,IF函數還可以和聚合函數結合,例如查詢班級男生女生分別有多少人:
SELECT COUNT(IF(sex=1,1,NULL)) 男生人數,COUNT(IF(sex=0,1,NULL))女生人數 FROM students3 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;其他,AVG、COUNT等用同樣方式處理,而且,無論where條件存在不存在,結果都是會返回0的。
作者:云深i不知處原文鏈接:https://blog.csdn.net/mu_wind/article/details/93976316
總結
以上是生活随笔為你收集整理的.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米12 Ultra把高通骁龙8+彻底驯
- 下一篇: 波音、空客笑开花 印度航空抛出300架飞