MySQL CASE 表達式

  1. CASE 表達式是什么?
  2. 怎樣使用 CASE 表達式?

1.CASE 表達式是什么?

CASE 表達式是sql語言分情況討論的一種表達形式。
CASE 表達式有兩種:

  • 一種是類似編程的 switch case。 SQL 中稱為簡單 CASE 表達式
  • 一種是類似于 IF 語句的根據(jù)條件表達式進行判斷。 SQL 語言稱為搜索 CASE 表達式

2. 如何使用 CASE 表達式?

分別就簡單 CASE 表達式和搜索 CASE 表達式使用方式

2.1 簡單 CASE 表達式

類似編程的 switch case 的方式

CASE value
WHEN compare_value_1 THEN result_1
WHEN compare_value_2 THEN result_2
…
ELSE result END

根據(jù)一個 valuecompare_value_1 進行比較。滿足的話就進入 THEN 之后的表達式中,不滿足的話就進入 ELSE 。

SELECT 
    CASE position
        WHEN '主任醫(yī)師' THEN 1
        ELSE 0
    END AS is_p
FROM
    doctor

根據(jù) position 的值進行判斷返回 1 或者是 0

ELSE可以省略 END 不能省略

2.2 搜索 CASE 表達式

IF類型的 CASE 表達式

CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
…
ELSE result END

此時自上而下根據(jù)condition判斷,取對應(yīng)的值,都不滿足的時候取最后的result。
例子:

SELECT 
    customerName, state, country
FROM
    customers
ORDER BY (
CASE
    WHEN state IS NULL THEN country
    ELSE state
END);

另一個例子,動態(tài)聚合函數(shù)的輸入:

SELECT 
    SUM(CASE
        WHEN status = 'Shipped' THEN 1
        ELSE 0
    END) AS 'Shipped',
    SUM(CASE
        WHEN status = 'On Hold' THEN 1
        ELSE 0
    END) AS 'On Hold',
    SUM(CASE
        WHEN status = 'In Process' THEN 1
        ELSE 0
    END) AS 'In Process',
    SUM(CASE
        WHEN status = 'Resolved' THEN 1
        ELSE 0
    END) AS 'Resolved',
    SUM(CASE
        WHEN status = 'Cancelled' THEN 1
        ELSE 0
    END) AS 'Cancelled',
    SUM(CASE
        WHEN status = 'Disputed' THEN 1
        ELSE 0
    END) AS 'Disputed',
    COUNT(*) AS Total
FROM
    orders;

CASE與IFNULL

MySQL中還有一個IFNULL表達式,其格式如下:

IFNULL(expression_1,expression_2);

其邏輯為:如果expression_1 為null,則返回expression_1,否則返回expression_2.
例如:

SELECT 
    IFNULL(education, '-1') AS e_type
FROM
    doctor;

上述語句中,如果education is null ,則返回-1,反則返回-1。

如果使用CASE來表達:

SELECT 
    CASE
        WHEN education IS NULL THEN '-1'
        ELSE education
    END AS e_type
FROM
    doctor;

CASE與IF

事實上,IFNULL的通用形式是IF表達式,其格式為

IF(condition,expression_1,expression_2)

類似于Java中的三元操作符,其邏輯為:如果condition為true,返回expression_1,否則 返回expression_2.
例如:

SELECT 
    IF(education IS NULL, '-1' , '1') AS e_type
FROM
    doctor;

如果使用CASE來表達:

SELECT 
    CASE
        WHEN education IS NULL THEN '-1'
        ELSE '1'
    END AS e_type
FROM
    doctor;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CASE 表達式是 SQL 里非常重要而且使用起來非常便利的技術(shù),我們應(yīng)該學(xué)會用它來描述條件分支。本節(jié)將通過行列轉(zhuǎn)...
    TechTalker閱讀 518評論 0 1
  • 最近有個統(tǒng)計的需求,需要在 SQL 中完成,但是出現(xiàn)了一個問題:統(tǒng)計的時候由于分母為 0 造成結(jié)果為 null,于...
    帥可兒妞閱讀 1,892評論 0 1
  • 1-1 CASE表達式 標(biāo)簽(空格分隔): SQL進階教程 在 SQL 里表達條件分支 CASE 表達式是 SQL...
    假如是地質(zhì)學(xué)家dm閱讀 1,046評論 0 0
  • 使用 CASE 表達式,我們可以在 SQL 中實現(xiàn)類似 if-elseif-else 邏輯。Oracle 9i 及...
    deniro閱讀 552評論 0 1
  • MySQL基礎(chǔ)操作 創(chuàng)建數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)庫,該命令的作用: 如果數(shù)據(jù)庫不存在則創(chuàng)建,存在則不創(chuàng)建。 創(chuàng)建RUNOO...
    少年_323a閱讀 861評論 0 0

友情鏈接更多精彩內(nèi)容