1,前提
看同事寫的sql語句時,覺得他寫的這個count+sum+if的sql還挺新鮮,
學習記錄下,感覺這個挺適合用來對歷史數據做條件統計
2,count使用結果
select count(0);//1select count(1);//1select count(null);//0select count(true);//1select count(false);//1
3,應用
這個SQL語句的含義是從名為"test"的表中查詢一些統計數據。下面是對每個選擇的列的解釋:
- coming_times :計算在接下來的3天內到期且狀態為"normal"或"over"的記錄數量。
- coming_amount :計算在接下來的3天內到期且狀態為"normal"或"over"的記錄的金額總和。
- already_times :計算狀態為"ahead"、"normal"或"over"的記錄數量。
- already_amount :計算狀態為"ahead"、"normal"或"over"的記錄的金額總和。
這個SQL語句的目的是提供關于"test"表中不同狀態和到期時間范圍的記錄的統計信息
SELECTCOUNT(IF(expire_date < DATE_ADD(now(), INTERVAL 3 DAY) AND expire_date >= now() AND status IN ('normal', 'over'), true, null)) AS coming_times,SUM(IF(expire_date < DATE_ADD(now(), INTERVAL 3 day) AND expire_date >= now() AND status IN ('normal', 'over'),amount,0)) AS coming_amount,COUNT(IF(status IN ('ahead','normal', 'over'),true,null)) AS already_times,SUM(IF(status IN ('ahead','normal', 'over'),amount,0)) AS already_amountFROM test