一、MySql中的三元運算符有兩種方法:sql
case when 條件 then (條件爲true時執行) else(條件爲false時執行) end /*end不可少*/數據庫
select *,if(expr1,expr2,expr3) from 表名函數
問題描述:統計數據時,須要查詢回覆量>0的記錄總數spa
解決方案: IFNULL(SUM(IF(p.reply_count>0,'1','0')),0) replyCount.net
二、問題描述:進行數據統計時,在sql中使用了SUM()函數,返回的結果集中有null值code
解決方案:利用IFNULL()函數判斷SUM()函數查詢的結果集是否爲null,若果是null,將結果設置爲某一固定值(好比0)blog
參考:解決數據庫查詢時Null的問題(如SUM函數)get
1 #SUM(expr)函數若是表達式沒有數據,那麼返回的結果就會爲空,下面介紹四種方法解決NUll問題: 2 3 #第一種: 採用 IFNULL(expr1,expr2)函數,當expr1爲NULL時,則數據返回默認值expre2 4 5 SELECT IFNULL(SUM(expr),0) -- 表示若 SUM()函數結果返回爲NULL澤返回0 6 7 #第二種: 採用從 COALESCE(value,...) 函數, COALESCE 函數做用是返回傳入參數中第一個非空的值 8 9 SELECT COALESCE(SUM(expr),0) 10 11 #第三種: 採用 case WHEN THEN WHEN THEN .. ELSE END 函數,注意 CASE WHEN 函數最後是以 END 結尾 12 13 SELECT CASE WHEN ISNULL(SUM(expr)) THEN 0 ELSE SUM(expr) END 14 15 #第四種: 在結果集中進行處理 16 17 #好比在Java在進行數據庫交互查詢以後,處理 SUM(expr) 的結果集,返回爲null,進行==判斷便可: 18 #if(result == null){result=0} return result; 19 #or if(result instanceof Integer){return result}else{return 0;}
附:SUM()與COUNT()的區別:class
SQL中AVG、COUNT、SUM、MAX等聚合函數對NULL值的處理:select
三、問題描述:從部門表(org)查詢部門人數大於3人(employee)的全部部門的信息
解決方案:
SELECT o.* FROM org o WHERE STATUS=1 AND o.id IN (
SELECT temp.oid FROM (
SELECT COUNT(*) custNum,e.org_id oid FROM employee e WHERE e.state=1 GROUP BY oid HAVING custNum>0
) AS temp
)