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

歡迎訪問 生活随笔!

生活随笔

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

数据库

.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

發布時間:2023/12/10 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .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:

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函數也能通過判斷條件來返回特定值,它的語法如下:

IF(expr,result_true,result_false)

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

用一個示例演示,還是表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,例如:

-- 返回結果: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详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。