1. 程式人生 > >sql中兩種情況判斷(if函式)、多種情況判斷(case .. when...)

sql中兩種情況判斷(if函式)、多種情況判斷(case .. when...)

原地址:https://segmentfault.com/a/1190000009676728

sum(if(actual_num>0, share_post,0))

其中SUM的意思淺顯易懂,求和嘛。IF也十分清晰:判斷嘛。而且if的第一個引數很明顯就是條件,那另外兩個引數是什麼呢?
查了一下資料:
語法:IF(expr1,expr2,expr3)
其中,expr1是判斷條件,expr2和expr3是符合expr1的自定義的返回結果。
用處:當從資料庫中查詢出來的結果需要轉換成中文或是其他自定義的格式顯示在網頁上的時候,可以直接在sql中處理

咳咳,看懂了麼?第二個引數和第三個引數是結果。。。那用哪個呢?
簡單通俗的解釋是這樣的:
if(a,b,c)如果a成立,執行b,不成立執行C


好吧,其實就是這麼簡單。
所以,圖片中的這個語句意思就是:如果actual_num>0的話,就求share_post的和,否則就是0(其實是對0求和,還是0)
我們可以看出,如果資料表中的某個欄位只有兩種情況,可以使用if函式。

擴充套件:

上面說如果資料表中的某個欄位只有兩種情況,可以使用if函式,那多餘兩種情況呢?
在查資料的時候我看到了一個大神的分享:
如果資料表中的某欄位多餘兩種情況時,可以使用case...when
舉例如下:

select  
case   
when oi.order_type_id='SALE' then '銷售'  
when oi.order_type_id='PURCHASE'
then '採購' end as 訂單型別 from order_info as oi;

然後在結果集中取出欄位名為‘訂單型別’的資料即可。
我們一般的習慣都是在資料庫查出來欄位,然後在程式碼中處理資料的顯示,但是這樣做比較麻煩,使用case...when的方法可以直接顯示我們所要的。可以直接在sql語句中操作,將從資料庫中查詢出來的資訊不要直接放入結果集中,而是將這些資訊轉換成頁面需要顯示的資料後再存入結果集中。(當然,完全看個人習慣,拿出來處理也是可取的)