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

MySQL查询简化:分组后按类别排除指定商品编码统计交易数

简化MySQL查询:按分类排除指定编码后统计交易数

嘿,我来帮你搞定这个MySQL查询的简化问题!这里有两种实用的写法,既能满足按分类排除指定item_code的需求,又能清晰统计各分类的有效交易数:

方式一:直接在WHERE子句中定义排除规则(适合规则固定场景)

这种写法逻辑直观,把各分类的排除规则直接写在过滤条件里,代码简洁易懂:

SELECT 
    Category,
    COUNT(*) AS `Total Transactions`
FROM your_transaction_table
WHERE 
    (Category = 'A' AND item_code NOT IN (1, 3))
    OR (Category = 'B' AND item_code NOT IN (2, 3, 5))
    OR (Category = 'C' AND item_code NOT IN (4, 5))
GROUP BY Category;

如果你的交易表上有(Category, item_code)的联合索引,这个查询的性能会非常出色,数据库能快速过滤掉不符合条件的记录。

方式二:用临时规则表关联查询(适合规则易变动场景)

如果后续可能需要修改排除规则或者新增分类,这种方式的可维护性更强——你只需要调整规则表的内容,不用动主查询逻辑:

WITH category_exclusions AS (
    SELECT 'A' AS Category, 1 AS excluded_code UNION ALL
    SELECT 'A', 3 UNION ALL
    SELECT 'B', 2 UNION ALL
    SELECT 'B', 3 UNION ALL
    SELECT 'B', 5 UNION ALL
    SELECT 'C', 4 UNION ALL
    SELECT 'C', 5
)
SELECT 
    t.Category,
    COUNT(*) AS `Total Transactions`
FROM your_transaction_table t
LEFT JOIN category_exclusions ce 
    ON t.Category = ce.Category AND t.item_code = ce.excluded_code
WHERE ce.excluded_code IS NULL
GROUP BY t.Category;

要是你的MySQL版本低于8.0(不支持CTE),可以把CTE换成子查询:

SELECT 
    t.Category,
    COUNT(*) AS `Total Transactions`
FROM your_transaction_table t
LEFT JOIN (
    SELECT 'A' AS Category, 1 AS excluded_code UNION ALL
    SELECT 'A', 3 UNION ALL
    SELECT 'B', 2 UNION ALL
    SELECT 'B', 3 UNION ALL
    SELECT 'B', 5 UNION ALL
    SELECT 'C', 4 UNION ALL
    SELECT 'C', 5
) ce ON t.Category = ce.Category AND t.item_code = ce.excluded_code
WHERE ce.excluded_code IS NULL
GROUP BY t.Category;

这两种写法都能得到你想要的结果,比如分类A处理后会显示570的交易数,你只需要把your_transaction_table换成你实际的表名就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:10