【平常總結】數據庫查詢遇到的問題:三目運算、sum的null值處理、多表聯查

一、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

  • SUM是對符合條件的記錄的數值列求和
  • COUNT 是對查詢中符合條件的結果(或記錄)的個數

  SQL中AVG、COUNT、SUM、MAX等聚合函數對NULL值的處理:select

  • AVG忽略NULL值,而不是將其做爲「0」參與計算
  • COUNT(*)對錶中行數進行計數無論是否有NULL,COUNT(字段名)對特定列有數據的行進行計數忽略NULL值
  • MAX()、MIN()求最大、最小值都忽略NULL
  • 能夠對單個列求和,也能夠對多個列運算後求和忽略NULL值,且當對多個列運算求和時,若是運算的列中任意一列的值爲NULL,則忽略這行的記錄。

 

三、問題描述:從部門表(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

)

相關文章
相關標籤/搜索