使用SQL語句統計數據時sum和count函數中使用if判斷條件的講解


首先舉個栗子(不想看的話直接下面看總結):

order_type:訂單類型
open_id:用戶唯一標識

SELECT
    date(create_time) AS '當天日期',
    sum(real_price) AS '當天總收入',
    sum(IF (order_type = 0, real_price, 0)) AS '當天支付收入',
    sum(IF (order_type = 1, real_price, 0)) AS '當天打賞收入',
    count(DISTINCT open_id) AS '付費總人數',
    count(DISTINCT open_id,IF (order_type = 0, TRUE, NULL)) AS '支付人數',
    count(DISTINCT open_id,IF (order_type = 1, TRUE, NULL)) AS '打賞人數',
    count(id) AS '付費訂單總數',
  count(DISTINCT id,IF (order_type = 0, TRUE, NULL)) AS '支付訂單數',
  count(DISTINCT id,IF (order_type = 1, TRUE, NULL)) AS '打賞訂單數'
FROM
orders
WHERE
    'real_price' != 1
    AND 'status' != 0
GROUP BY DATE(create_time)

查詢結果:為了區分打賞訂單和支付訂單的數據統計,使數據更加清晰

小結:

sum函數中使用if判斷條件格式為:sum(if(條件,列值,0))

注解:sum是求和函數,條件為真時,執行列值(字段名)求和也就是累加,條件為假時為0求和(當然還是0)

1.單條件判斷格式,sum(if(條件字段名=值,需要計算sum的字段名,0))

2.多條件判斷格式,sum(if(條件字段名>值 AND 條件字段名>值 AND 條件字段名=值,1,0))

注解:多條件判斷格式整體含義為,計算滿足條件的數據總數,如果滿足條件,那么數據總數加1,所以1的含義為累加1

3.常見case when格式,sum(case when 條件字段名 in (范圍較小值,范圍較大值) then [需要計算sum的字段名] else 0 end)

count函數中使用if判斷條件格式為:

1.統計總數,count(if(條件字段名=值,true,null))

2.統計總數去重復值,count(DISTINCT 需要計算count的字段名,if(條件字段名=值,true,null))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM