在做數據分析的時候,需要從資料庫中查找數據併進行分析展示,準確的數據查詢結果有利於後期簡潔有效的分析。在此期間用到了 mysql中的case when,記錄一下case when的用法。 CASE語句為多分支語句結構,該語句首先從WHEN後的VALUE中查找與CASE後的VALUE相等的值,如果查找 ...
在做數據分析的時候,需要從資料庫中查找數據併進行分析展示,準確的數據查詢結果有利於後期簡潔有效的分析。在此期間用到了 mysql中的case when,記錄一下case when的用法。
CASE語句為多分支語句結構,該語句首先從WHEN後的VALUE中查找與CASE後的VALUE相等的值,如果查找到,則執行該分支的內容,否則執行ELSE後面的內容。
MySql的case when 語法有兩種:
1、簡單函數 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
2、搜索函數 CASE WHEN [expr] THEN [result1]…ELSE [default] END
簡單函數:
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END;枚舉這個欄位所有可能的值。
SELECT DATE_FORMAT( paytime, '%Y-%m-%d-%H' ) payhours, state, CASE state WHEN '1' THEN '交易成功' WHEN '2' THEN '交易失敗' WHEN '0' THEN '待支付' ELSE '無' END '狀態名稱' FROM payorder WHERE DATE_FORMAT( paytime, '%Y-%m-%d' ) = '2020-05-26' GROUP BY payhours ASC;
查詢結果:
搜索函數:
CASE WHEN [expr] THEN [result1]…ELSE [default] END;搜索函數可以寫判斷,並且搜索函數只會返回第一個符合條件的值,其他case
被忽略.即:在when後面的表達式中寫出要搜索的判斷條件,然後在THEN後面寫上判斷結果。
SELECT DATE_FORMAT( paytime, '%Y-%m-%d-%H' ) payhours, CASE WHEN paytime <='2020-05-26 09:00:00' THEN '早上' WHEN paytime <='2020-05-26 12:59:59' THEN '上午' ELSE '下午' END '時間段' FROM payorder WHERE DATE_FORMAT( paytime, '%Y-%m-%d' ) = '2020-05-26' GROUP BY payhours ASC;
查詢結果:
聚合函數 sum 配合 case when 的簡單函數實現行轉列
SELECT DATE_FORMAT( paytime, '%Y-%m-%d-%H' ) payhours, sum( CASE state WHEN '1' THEN 1 ELSE 0 END ) AS state1, sum( CASE state WHEN '2' THEN 1 ELSE 0 END ) AS state2, sum( CASE state WHEN '0' THEN 1 ELSE 0 END ) AS state0 , count(payorderid) AS countsum FROM payorder WHERE DATE_FORMAT( paytime, '%Y-%m-%d' ) = '2020-05-26' GROUP BY payhours ASC;