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
        
相关推荐
qq_33456355几秒前
Python开发Flask项目如何部署到云服务器_使用Fabric自动化发布脚本
jvm·数据库·python
试试勇气1 分钟前
MySQL--数据类型
数据库·mysql
2301_764150562 分钟前
JavaScript中预取Prefetch与预加载Preload策略
jvm·数据库·python
aXin_ya3 分钟前
微服务 第二天
java·数据库·微服务
Polar__Star5 分钟前
如何在画中画(PiP)模式下动态切换视频源
jvm·数据库·python
希望永不加班7 分钟前
Spring AOP 核心概念:切面、通知、切点、织入
java·数据库·后端·mysql·spring
山峰哥11 分钟前
SQL查询优化实战:从Explain分析到索引策略的深度解析
数据库·oracle
X1A0RAN16 分钟前
容器化部署elasticsearch教程+python操作es数据库示例
数据库·python·elasticsearch
weixin_5806140017 分钟前
Go语言怎么优化goroutine_Go语言goroutine优化教程【基础】
jvm·数据库·python
qq_1898070321 分钟前
mysql如何查看所有数据库用户_mysql用户查询管理命令
jvm·数据库·python