1,前提
看同事写的sql语句时,觉得他写的这个count+sum+if的sql还挺新鲜,
学习记录下,感觉这个挺适合用来对历史数据做条件统计
2,count使用结果
sql
select count(0);//1
select count(1);//1
select count(null);//0
select count(true);//1
select 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"表中不同状态和到期时间范围的记录的统计信息
sql
SELECT
COUNT(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_amount
FROM test