mysql是一個關系型數據庫管理系統,由瑞典mysql ab 公司開發,目前屬于?oracle?旗下產品。
那么其中mysql case語句怎么用?
mysql case語句用法:
結構:case? when… then …end
1.判斷的同時改變其值
eg:
select?OperatorAccount, ????????case when?CreateTime>'2016-02-14?16:24:42'?then?'after' ?????????when?CreateTime<p><img src="https://img.php.cn/upload/image/704/307/148/1557717013649586.png" title="1557717013649586.png" alt="910fe696498deccf0c50f46c9d70345.png"></p><p>第二種寫法</p><pre class="brush:php;toolbar:false">?SELECT?CallerNumber,?CASE?IsLocal ?????????WHEN?0?THEN?'外線' ??????????WHEN?1?THEN?'內線'?END ??FROM?cdr
2.拆分一行為多列
eg:
SELECT?SipAccount,?COUNT(1)?AS?number,IsCheck ??FROM?cdr ??GROUP?BY?SipAccount,IsCheck
?
針對這個統計結果進行拆分(0表示未打分,1代表優秀,2代表合格,3代表不合格)
最終結果如下:
所以最終要用到行拆分成三列,語句如下
?SELECT?SipAccount, ??????????????(CASE?IsCheck?WHEN?1?THEN?number?END)?youxiu, ??????????????(CASE?IsCheck?WHEN?2?THEN?number?END)?hege, ??????????????(CASE?IsCheck?WHEN?3?THEN?number?END)?buhege ?FROM ??????????(SELECT?SipAccount,?COUNT(1)?AS?number,IsCheck ???????????FROM?cdr ???????????GROUP?BY?SipAccount,IsCheck)?AS?a
現在結果是這樣的,你會發現雖然拆成了三列,但是最終結果還不是自己需要的,接下來就需要根據sipaccount來分組的同時對結果進行處理了。語句如下:
?SELECT?sipaccount, ????????IF(MAX(youxiu)?IS?NULL,0,?MAX(youxiu))?youxiu, ????????IF(MAX(hege)?IS?NULL,0,?MAX(hege))?hege, ????????IF(MAX(buhege)?IS?NULL,0,?MAX(buhege))?buhege FROM ????????(SELECT?SipAccount, ????????(CASE?IsCheck?WHEN?1?THEN?number?END)?youxiu, ????????(CASE?IsCheck?WHEN?2?THEN?number?END)?hege, ????????(CASE?IsCheck?WHEN?3?THEN?number?END)?buhege ????????FROM ?? (SELECT?SipAccount,?COUNT(1)?AS?number,IsCheck??FROM?cdr??GROUP?BY?SipAccount,IsCheck)?AS?a)?AS?b ????????????????????GROUP?BY?sipaccount
最終得到了這個結果。正是我們需要的格式。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END