首頁 > 軟體

SQL中case when then else end用法範例

2023-02-03 18:03:55

一、闡述

case when then else end 可以理解為java的if-else if -else。可以理解為流程控制語句或條件控制語句。可以實現資料獲取的時候,可以更多的條件和自定義邏輯。

適用情景

  • 對已知的資料庫中資料,按照自己的邏輯,進行自定義分組和資料分析
  • 用此條件控制語句,實現自定義條件分組
  • 條件控制語句中巢狀函數達到理想的計算效果

二、具體使用

1.已知資料按照另外一種方式進行分組,分析。

有如下資料:(為了看得更清楚,我並沒有使用國家程式碼,而是直接用國家名作為primary key)

國家(country)

人口(population)

中國

600

美國

100

加拿大

100

英國

200

法國

300

日本

250

德國

200

墨西哥

50

印度

250

根據這個國家人口資料,統計亞洲和北美洲的人口數量。應該得到下面這個結果。

人口

亞洲

1100

北美洲

250

其他

700

想要解決這個問題,假如使用case函數,sql程式碼如下:

select sum(population),
            case country
            when '中國'     then'亞洲'
            when '印度'     then'亞洲'
            when '日本'     then'亞洲'
            when '美國'     then'北美洲'
            when '加拿大'  then'北美洲'
            when '墨西哥'  then'北美洲'
            else '其他' end
            from   table_a
            group by case country
            when '中國'     then'亞洲'
            when '印度'     then'亞洲'
            when '日本'     then'亞洲'
            when '美國'     then'北美洲'
            when '加拿大'  then'北美洲'
            when '墨西哥'  then'北美洲'
            else '其他' end;

2.用一個sql語句完成不同條件的分組。

有如下資料

國家(country)

性別(sex)

人口(population)

中國

1

340

中國

2

260

美國

1

45

美國

2

55

加拿大

1

51

加拿大

2

49

英國

1

40

英國

2

60

按照國家和性別進行分組,得出結果如下

國家

中國

340

260

美國

45

55

加拿大

51

49

英國

40

60

普通情況下,用union也可以實現用一條語句進行查詢。但是那樣增加消耗(兩個select部分),而且sql語句會比較長。

下面是一個是用case函數來完成這個功能的例子

select country,
            sum( case when sex = '1' then
            population else 0 end),  --男性人口
            sum( case when sex = '2' then
            population else 0 end)   --女性人口
            from table_a
            group by country;

這樣我們使用select,完成對二維表的輸出形式,充分顯示了case函數的強大。

補充:對case when 的理解總結

1、then和else後,只能寫一條輸出語句且輸出結果就是新生成列的值;when 後的條件判斷可以有多條,且可以多個欄位聯合判斷;end 後的輸出也可以有多條,但必須有一個是新生成列的欄位名; [常規用法:select 後到from前,直接使用case when] (例1)

2、when 後多條件判斷用and連線(例3)

3、case when 巧妙用法   [order by 後用case when] [count()中用case when]   (例2)

4、group by 後用case when   (在參考裡)

5、case when,如果有多個,如果一條記錄滿足第一個case when就不會再去執行後面的case when,所以要想保證某個case when一定執行,就把她寫在最前面。

總結

到此這篇關於SQL中case when then else end用法的文章就介紹到這了,更多相關SQL case when then else end用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com