sql 条件统计,count+if+sum

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
        
相关推荐
一代...几秒前
【Redis】Redis基本命令(1)
数据库·redis·缓存
老朋友此林23 分钟前
go语言学习笔记:gin + gorm + mysql 用户增删改查案例入门
mysql·golang·gin
八股文领域大手子27 分钟前
深入浅出 Redis:核心数据结构解析与应用场景Redis 数据结构
java·数据结构·数据库·人工智能·spring boot·redis·后端
atbigapp.com33 分钟前
DeepSeek在数据仓库的10大应用场景
大数据·数据库·人工智能
结衣结衣.1 小时前
【MySQL】库的操作
linux·数据库·mysql
成工小白1 小时前
Redis的下载安装和使用(超详细)
数据库·redis·缓存
dl8106727312 小时前
Redis的IO多路复用
数据库·redis·缓存
Code哈哈笑3 小时前
Idea连接远程云服务器上的MySQL,开放云服务器端口
服务器·后端·mysql·spring
小王子玫瑰狐3 小时前
数据库之MySQL
数据库·mysql
Arbori_262156 小时前
oracle DECODE 函数
数据库·oracle