You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL大表统计:按职员、客户、日期统计多产品订单组合

解决方案:统计多产品订单组合数量

先明确需求:我们需要从这张包含30万条记录的MySQL表中,统计同一职员(ClerkID)、同一客户(CustomerID)、同一日期下的多产品订单组合,并且排除只包含单一产品的条目,最终输出产品组合和对应的出现次数。

首先整理下清晰的原始表结构:

KeyClerkIDCustomerIDProductCodeDateTypeColor
11010123AAA2018-01-011Red
21010123BBB2018-01-012Blue
31010123AAA2018-01-021Red
41010456CCC2018-01-011Red
51010456DDD2018-01-022Red
61010456DDD2018-01-023Blue
711456AAA2018-01-023Blue

实现思路与SQL代码

核心思路是先按职员、客户、日期分组,过滤出包含多个产品的组,再对产品组合进行统计:

  1. 内层分组:按ClerkID、CustomerID、Date聚合,对每组内的产品去重后拼接成组合字符串,同时统计产品数量以过滤单一产品的组
  2. 外层统计:对拼接好的产品组合再次分组,计算每个组合的出现次数

对应的SQL代码如下:

SELECT 
    product_combination AS Products,
    COUNT(*) AS Count
FROM (
    SELECT 
        ClerkID,
        CustomerID,
        Date,
        GROUP_CONCAT(DISTINCT ProductCode ORDER BY ProductCode SEPARATOR ', ') AS product_combination,
        COUNT(DISTINCT ProductCode) AS product_count
    FROM 
        your_table_name  -- 替换为你的实际表名
    GROUP BY 
        ClerkID, CustomerID, Date
    HAVING 
        product_count > 1
) AS grouped_data
GROUP BY 
    product_combination
ORDER BY 
    Count DESC;

代码细节说明

  • GROUP_CONCAT(DISTINCT ProductCode ORDER BY ProductCode):对每组内的产品去重后按字母排序拼接,确保AAA,BBB和BBB,AAA被判定为同一个组合
  • COUNT(DISTINCT ProductCode) + HAVING product_count > 1:精准过滤掉仅含单一产品的分组
  • 针对30万条数据的性能优化:建议给ClerkID、CustomerID、Date创建联合索引,避免全表扫描带来的性能损耗

验证结果

用示例数据运行上述查询,会得到完全符合期望的输出:

ProductsCount
AAA, BBB1
CCC, DDD1

内容的提问来源于stack exchange,提问作者kidnim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:45:14