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

MySQL GROUP BY分组统计:按字段分组,统计不同stock值的Total1与Total2

解决MySQL按分组统计不同stock值对应总量的方案

没问题,这个需求用条件聚合就能完美实现,核心就是在聚合函数里结合条件判断,分别统计stock=0和stock=1的对应总量。下面给你两种常见场景的SQL写法:

场景1:统计符合条件的记录条数

如果Total1和Total2是要统计对应stock值的记录数量,用COUNT结合CASE WHEN:

SELECT 
    ID,
    Libelle,
    -- 统计stock=0的记录数
    COUNT(CASE WHEN stock = 0 THEN 1 END) AS Total1,
    -- 统计stock=1的记录数
    COUNT(CASE WHEN stock = 1 THEN 1 END) AS Total2
FROM your_table -- 替换成你的实际表名
GROUP BY ID, Libelle;

这里CASE WHEN在满足条件时返回1,不满足时默认返回NULL,而COUNT会自动忽略NULL值,刚好实现分组统计对应stock的记录数。

场景2:统计某个数值字段的总和

如果Total1和Total2是要统计对应stock值下某个数值字段(比如amount、quantity)的总和,用SUM结合CASE WHEN:

SELECT 
    ID,
    Libelle,
    -- 统计stock=0时的数值总和
    SUM(CASE WHEN stock = 0 THEN your_numeric_field ELSE 0 END) AS Total1,
    -- 统计stock=1时的数值总和
    SUM(CASE WHEN stock = 1 THEN your_numeric_field ELSE 0 END) AS Total2
FROM your_table -- 替换成你的实际表名
GROUP BY ID, Libelle;

这里不满足条件时返回0,保证SUM计算时不会遗漏分组(如果某个分组没有对应stock值,会返回0而不是NULL)。

简化写法(可选)

如果你的MySQL版本支持,也可以用IF函数替代CASE WHEN,代码更简洁:

-- 统计记录数的简化版
SELECT 
    ID,
    Libelle,
    COUNT(IF(stock = 0, 1, NULL)) AS Total1,
    COUNT(IF(stock = 1, 1, NULL)) AS Total2
FROM your_table
GROUP BY ID, Libelle;

不过CASE WHEN是SQL标准语法,兼容性更好,如果你需要跨数据库迁移,推荐用第一种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:49:34