Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Mysql根据不同条件统计汇总数据

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

作者:叫我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)查询出订单表中各个状态分别有多少笔订单?

  注:

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的基础上,汇总每种状态下订单数量及金额

  注:

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)按商品分类统计,每个分类下各状态的订单数量及总金额

  注:

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

您可能感兴趣的文章:
阅读全文