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

 更新时间:2025年10月20日 08:32:34   作者:叫我Zoe就行  
在网站开发的过程中,经常会用到数据统计功能,因此条件计数查询便是不可避免的,这篇文章主要介绍了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根据不同条件统计汇总数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql数据库乱码之保存越南文乱码解决方法

    mysql数据库乱码之保存越南文乱码解决方法

    做一个包含越南文的网站,用户说在保存包含越南文的文章时,MSYQL乱码了,看下面的解决方法
    2013-12-12
  • MySQL实现批量插入测试数据的方式小结

    MySQL实现批量插入测试数据的方式小结

    在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 经常需要一些测试数据, 本文主要介绍了两种常用的MySQL测试数据批量生成方式,希望对大家有所帮助
    2023-11-11
  • mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解

    mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解

    本文通过图文并茂的形式给大家介绍了mysql 5.7.21 解压版,通过历史data目录恢复数据的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • mysql中删除数据的四种方法小结

    mysql中删除数据的四种方法小结

    在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据,本文就来介绍一下四种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • MySQL如何创建可以远程访问的root账户详解

    MySQL如何创建可以远程访问的root账户详解

    作为MySQL数据库管理员,创建远程用户并设置相应的权限是一项常见的任务,下面这篇文章主要给大家介绍了关于MySQL如何创建可以远程访问的root账户的相关资料,需要的朋友可以参考下
    2024-04-04
  • 10个MySQL性能调优的方法

    10个MySQL性能调优的方法

    本文介绍了10个MySQL性能调优的方法,每个方法的讲解都很细致,非常实用,,需要的朋友可以参考下
    2015-07-07
  • MySQL CHECK约束的实现示例

    MySQL CHECK约束的实现示例

    使用CHECK约束可以确保在插入或更新记录时,某列或某组列的值满足特定的条件,本文主要介绍了MySQL CHECK约束的实现示例,感兴趣的可以了解一下
    2024-07-07
  • MySQL中的布尔值,怎么存储false或true

    MySQL中的布尔值,怎么存储false或true

    这篇文章主要介绍了MySQL中的布尔值,怎么存储false或true的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • mysql数据库的五种安装方式总结

    mysql数据库的五种安装方式总结

    这篇文章主要介绍了五种在不同操作系统上安装和配置MySQL的方法,包括Windows版本安装、yum仓库安装、二进制本地安装、容器平台安装以及源码部署,每种方法都介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • MySQL Hints控制查询优化器的选择问题小结

    MySQL Hints控制查询优化器的选择问题小结

    MySQL Hints是一种强大的工具,可以帮助我们解决复杂的查询性能问题,然而,它们应该谨慎使用,并且总是与彻底的测试和验证相结合,本文介绍MySQL Hints控制查询优化器的选择,感兴趣的朋友一起看看吧
    2024-06-06

最新评论