当前位置: 代码网 > it编程>数据库>Mysql > Mysql中根据不同条件来统计、汇总数据的操作实例

Mysql中根据不同条件来统计、汇总数据的操作实例

2025年10月20日 Mysql 我要评论
一、引言大家在实际开发中,经常会遇到需要根据不同条件统计数据的场景。比如电商平台需要统计不同状态的订单数量、各状态订单的总金额,或者按商品分类统计这些数据。今天我就以订单表为例,学习如何用 mysql

一、引言

大家在实际开发中,经常会遇到需要根据不同条件统计数据的场景。比如电商平台需要统计不同状态的订单数量、各状态订单的总金额,或者按商品分类统计这些数据。今天我就以订单表为例,学习如何用 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 (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, '华为', '3', 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 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;

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根据不同条件统计汇总数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com