case 表達式作為标準SQL的用法,真的是很強大。
case 表達式分為搜尋表達式和簡單表達式,由于搜尋表達式包含了簡單表達式的所有用法,此處僅介紹搜尋表達式的用法。
搜尋 case 表達式的文法如下:
上述語句執行時,依次判斷 when 表達式是否為真值,是則執行 then 後的語句,如果所有的 when 表達式均為假,則執行 else 後的語句。
取代小表關聯
之前工作中遇到一個需求,需要将表中的某列進行轉換,以得到新的列,當時采用的建立小表,然後再進行内連接配接的方法。
這個用法也沒啥問題,就是需要多建立一個表并寫入資料,步驟略微繁瑣。最近學習 case 表達式的用法,發現正好可以用來完成此工作。
兩種寫法可以得到同樣的結果,運作效率差異不大。第二種寫法看似代碼更加複雜,但是較寫法一少了建表、插入資料的步驟。
行轉列
假設有下表

想轉換成下面的樣子,該如何寫 sql 呢?
case when 表達式 + 聚合函數可以實作行轉列
總結:
- 當待轉換列為數字時,可以使用
等聚合函數;sum avg max min
- 當待轉換列為文本時,可以使用
等聚合函數max min