目php录
- 一、引言
- 二、环境准备
- 1. 创建表
- 1)新建库
- 2)新建orders表
- 2. 添加测试数据
- 3. 操作案例
- 1)查询出订单表中各个状态分别有多少笔订单?
- 2)在案例1的基础上,汇总每种状态下订单数量及金额
- 3)按商品分类统计,每个分类下各状态的订单数量及总金额
- 4)条件判断— 根据金额划分价格等级
- 总结
一、引言
大家在实际开发中,经常会遇到需要根据不同条件统计数据的场景。比如电商平台需要统计不同状态的订单数量、各状态订单的总金额,或者按商品分类统计这些数据。今天我就以订单表为例,学习如何用 mysql 的 case语句实现这些统计需求。
二、环境准备
1. 创建表
1)新建库
mysql> create database shopping; # 创建数据库 mysql> use shopping; # 使用数据库
2)新建orders表
mysql> create table orders( -> id int(11) primary key not null comment '订单编号', -> category varchar(255) default null comment '分类', -> status varchar(2) default null comment '状态(0:创建,1:待付款,2:待发货,3:待收货)', -> amount decimal(10,2) default null comment '金额');
2. 添加测试数据
mysql> insert into orders values (0, '华为', '0', 5500.00); mysql> insert into orders values (1, '小米', '2', 3000.00); mysql> insert into orders values (2, '华为', '1', 5500.00); mysql> insert into orders values (3, '苹果', '2', 5000.00); mysql> insert into orders values (4, '华为', '1', 5500.00); mysql> insert into orders values (5, '小米', '2', 3000.00); mysql> insert into orders values js(6, '华为', '0', 5500.00); mysql> insert into orders values (7, '苹果', '1', 5000.00); mysql> insert into orders values (8, '小米', '3', 3000.00); mysql> insert into orders values (9, '华为', '3php', 5500.00);
- 查看添加的内容
select * from orders;
3. 操作案例
1)查询出订单表中各个状态分别有多少笔订单?
注:
结果在一条记录中展示
case 语句的作用:根据不同条件返回不同值
count 函数特性:只统计非 null 值,所以 else 设为 null
别名设置:用 as将统计结果命名为对应状态
mysql> select -> count编程客栈(case when status = '0' then 1 else null end ) as 创建, -> count(case when status = '1' then 1 else null end ) as 待付款, -> count(case when status = '2' then 1 else null end ) as 待发货, -> count(case when status = '3' then 1 else null end ) as 待收货 -> from orders;
2)在案例1的基础上,汇总每种状态下订单数量及金额
注:
sum 函数与 case结合使用:满足条件时累加金额,否则加 0
ifnull 函数作用:处理可能为 NULL 的金额字段,避免统计结果为 null
金额统计逻辑:只对符合状态条件的记录进行金额汇总
mysql> select -> count(case when status = '0' then 1 else null end ) as 创建, -> count(case when status = '1' then 1 else null end ) as 待付款, -> count(case when status = '2' then 1 else null end ) as 待发货, -> count(case when status = '3' then 1 else null end ) as 待收货, -> sum(case when status = '0' then ifnull(amount,0) else 0 end) as 创建总金额, -> sum(case when status = '1' then ifnull(amount,0) else 0 end) as 待付款总金额, -> sum(case when jsstatus = '2' then ifnull(amount,0) else 0 end) as 待发货总金额, -> sum(case when status = '3' then ifnull(amount,0) else 0 end) as 待收货总金额 -> from orders;
3)按商品分类统计,每个分类下各状态的订单数量及总金额
注:
group by 的作用:按分类字段对结果进行分组
分组统计逻辑:每个分类内部单独计算各状态的数量和金额
结果解读:每一行代表一个分类的完整统计数据
mysql> select category as 分类, -> count(case when status = '0' then 1 else null end ) as 创建, -> count(case when status = '1' then 1 else null end ) as 待付款, -> count(case when status = '2' then 1 else null end ) as 待发货, -> count(case when status = '3' then 1 else null end ) as 待收货, -> sum(case when status = '0' then ifnull(amount,0) else 0 end) as 创建总金额, -> sum(case when status = '1' then ifnull(amount,0) else 0 end) as 待付款总金额, -> sum(case when status = '2' then ifnull(amount,0) else 0 end) as 待发货总金额, -> sum(case when status = '3' then ifnull(amount,0) else 0 end) as 待收货总金额 -> from orders group by category;
4)条件判断— 根据金额划分价格等级
mysql> select * , -> (case when amount<= 3000 then '低' -> when amount<= 5000 then '中' -> when amount<= 10000 then '高' -> else '未知区间' end) as 价格等级 -> from orders;
总结
到此这篇关于Mysql中根据不同条件来统计、汇总数据的文章就介绍到这了,更多相关Mysql根据不同条件统计汇总数据内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论