MySQL 两个分组count数据合并

在数据库操作中,我们经常需要对数据进行分组统计,然后根据统计结果进行进一步的分析和处理。本文将介绍如何在MySQL中实现两个分组的count数据合并。

问题背景

假设我们有一个订单表orders,其中包含订单ID、用户ID、订单状态等字段。现在我们需要统计每个用户的订单数量,并且将已完成订单和未完成订单的数量分别统计出来。

解决方案

我们可以使用MySQL的GROUP BYCASE WHEN语句来实现这个需求。下面是一个具体的实现示例:

1. 创建示例数据

首先,我们需要创建一个示例的订单表:

CREATE TABLE orders (
    order_id INT,
    user_id INT,
    order_status VARCHAR(10)
);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

然后,插入一些示例数据:

INSERT INTO orders (order_id, user_id, order_status) VALUES
(1, 1, 'completed'),
(2, 1, 'pending'),
(3, 2, 'completed'),
(4, 2, 'completed'),
(5, 3, 'pending');
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
2. 使用分组统计

接下来,我们使用GROUP BYCASE WHEN语句来统计每个用户的已完成订单和未完成订单数量:

SELECT 
    user_id,
    SUM(CASE WHEN order_status = 'completed' THEN 1 ELSE 0 END) AS completed_count,
    SUM(CASE WHEN order_status = 'pending' THEN 1 ELSE 0 END) AS pending_count
FROM 
    orders
GROUP BY 
    user_id;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

这个查询语句的逻辑是:对于每个用户,我们统计其已完成订单数量和未完成订单数量,然后将这两个统计结果合并为一条记录。

3. 结果展示

执行上述查询后,我们可以得到如下结果:

+---------+---------------+-------------+
| user_id | completed_count | pending_count |
+---------+---------------+-------------+
|       1 |              1 |            1 |
|       2 |              2 |            0 |
|       3 |              0 |            1 |
+---------+---------------+-------------+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

这个结果展示了每个用户的已完成订单数量和未完成订单数量。

流程图

下面是一个描述上述过程的流程图:

创建订单表 插入示例数据 使用分组统计 结果展示

结语

通过上述示例,我们可以看到MySQL的GROUP BYCASE WHEN语句在分组统计中的应用。这种方法可以方便地实现多个分组的count数据合并,为数据分析提供了便利。希望本文能够帮助到有类似需求的读者。