第一種:簡單Case函數(shù)?
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供富川網(wǎng)站建設(shè)、富川做網(wǎng)站、富川網(wǎng)站設(shè)計、富川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、富川企業(yè)網(wǎng)站模板建站服務(wù),十年富川做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
? ? ? ? ? case 列名
when ? 條件值1 ? then ?選擇項1
when ? 條件值2 ? ?then ?選項2.......
else ? ? 默認值 ? ? ?end
第二種:Case搜索函數(shù)
? ? ? ? ? case ?
when ?列名= 條件值1 ? then ?選擇項1
when ?列名=條件值2 ? ?then ?選項2.......
else ? ?默認值 end
比較: 兩種格式,可以實現(xiàn)相同的功能。簡單Case函數(shù)的寫法相對比較簡潔,但是和Case搜索函數(shù)相比,功能方面會有些限制,比如寫判斷式。
還有一個問題,Case函數(shù)只返回第一個符合條件的值,剩下的Case部分將會被自動忽略。如下面這個例子:
CASE col
WHEN col_1 IN ( 'a', 'b') THEN '第一類'
WHEN col_1 IN ('a')? ? ? THEN '第二類'
ELSE'其他' END
這個語句中,滿足條件a永遠不會返回第二類,因為按順序發(fā)現(xiàn)a在第一類的時候查詢就已經(jīng)結(jié)束了。所以case無法用于一個東西在一個分類里有不同的屬性的條件。
case when 好處很明顯就是非常易于看懂,相比實現(xiàn)同樣條件用復(fù)雜的自連接查詢,在邏輯上很容易看懂(自連接查詢在不同的情況下可能會有BUG)。
case when有兩個用法,一個是行轉(zhuǎn)列,一個是更改列的值
在數(shù)據(jù)分析時經(jīng)常要用到行轉(zhuǎn)列,此時如果使用case when就會方便很多,case when的熟練使用程度,可以說的判斷對SQL操作水平的評定方法之一。
case when的語句在某種程度上可以理解成是if函數(shù)的簡便邏輯寫法,主要有兩種模式:
模式一(簡單變量表達式):
模式二(搜索變量表達式):
通常情況下,模式二的方式會更加靈活,在工作中也推薦使用模式二的寫法(特別是如果有使用Tableau等軟件制作參數(shù)的時候,語法跟模式二的相同的)。
看具體的例子:
如果現(xiàn)在想要看不同學(xué)生的平均分和每個課程的成績,并且不同課程按列進行顯示,要怎么操作呢?
這個時候,使用case when就很方便了
當(dāng)然了,也可以使用case when對學(xué)生的成績進行優(yōu)良中差的判斷,這個在工作中的使用場景也是蠻多的,如果有興趣的同學(xué)可以自己試著練習(xí)看看。
這個就是case when在MySQL中的常用用法。
簡單 CASE 函數(shù):
CASE?input_expression
WHEN?when_expression?THEN?result_expression
[?...n?]
[?
ELSE?else_result_expression
END
CASE 搜索函數(shù):
CASE????
WHEN?Boolean_expression?THEN?result_expression
[?...n?]
[?
ELSE?else_result_expression
END
比如:
第一種用法:
SELECT?name,
CASE?WHEN?birthday??'1981'?THEN?'old'?
WHEN?birthday??'1988'?THEN?'yong'
ELSE?'ok'?END?YORN
FROM?lee
第二種用法:
SELECT?NAME,?CASE?name
WHEN?'sam'?THEN?'yong'
WHEN?'lee'?THEN?'handsome'
ELSE?'good'??END?as?oldname
FROM?lee
本文介紹case when
case 包含兩種表達格式:
第一種:簡單case函數(shù)
參數(shù):
input_expression 是使用簡單 CASE 格式時所計算的表達式,是任何有效的SQL表達式。
when when_expression 使用簡單 CASE 格式時 input_expression 所比較的簡單表達式。when_expression 是任意有效的SQL表達式。input_expression 和每個 when_expression 的數(shù)據(jù)類型必須相同,或者是隱性轉(zhuǎn)換。
[ ...n ]占位符 可以使用多個 when when_expression then result_expression 子句或 WHEN boolean_expression THEN result_expression 子句
then result_expression 當(dāng) input_expression = when_expression 取值為 true,或者 boolean_expression 取值為 true 時返回的表達式。
result expression 是任意有效的sql表達式。
esle else_result_expression
當(dāng)比較運算取值不為 TRUE 時返回的表達式。如果省略此參數(shù)并且比較運算取值不為 TRUE,CASE 將返回 NULL 值。else_result_expression 是任意有效的sql表達式。Else_result_expression 和所有 result_expression 的數(shù)據(jù)類型必須相同,或者必須是隱性轉(zhuǎn)換。
舉例說明:
第二種:case搜索函數(shù)
參數(shù)介紹:
WHEN Boolean_expression 使用 CASE 搜索格式時所計算的布爾表達式。
Boolean_expression 是任意有效的布爾表達式。結(jié)果類型從 result_expressions 和可選 else_result_expression 的類型集合中返回最高的優(yōu)先規(guī)則類型。有關(guān)更多信息,請參見數(shù)據(jù)類型的優(yōu)先順序。
CASE 搜索函數(shù) :返回結(jié)果值介紹:
按指定順序為每個 WHEN 子句的 Boolean_expression 求值。返回第一個取值為 TRUE 的 Boolean_expression 的 result_expression。
如果沒有取值為 TRUE 的 Boolean_expression,則當(dāng)指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。
舉例說明:
case when 具體用法就說到這里,謝謝各位。