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

如何在SQL查询中用COUNT CASE作为条件?遇分组函数错误求助

解决SQL中WHERE子句使用聚合函数报错的问题

错误原因

SQL里的WHERE子句是分组前过滤单条数据的,而COUNT这类聚合函数是分组后对组内数据计算统计值的,两者执行顺序不同,直接在WHERE里用聚合函数就会触发invalid use of group function错误。

替代方案(无需在外层用HAVING)

如果不想在主查询的WHERE后加HAVING,可以用子查询预计算聚合值,再在外层筛选:

SELECT 
    b.name AS Branches_name, 
    b.code AS Branches__code, 
    t.carried, 
    t.unCarried
FROM branches b
INNER JOIN (
    -- 子查询先按分支分组,计算已上架/未上架产品数量,并筛选出已上架=35的分支
    SELECT 
        company_id,
        branch_code,
        COUNT(CASE WHEN carried = 1 THEN 1 END) AS carried,
        COUNT(CASE WHEN carried = 0 THEN 1 END) AS unCarried
    FROM products_carried_per_branches
    WHERE deleted = 0
    GROUP BY company_id, branch_code
    HAVING COUNT(CASE WHEN carried = 1 THEN 1 END) = 35
) t ON t.company_id = b.company_id AND t.branch_code = b.code
-- 外层WHERE只过滤单条分支的条件
WHERE 
    b.company_id = 200017 
    AND b.deleted = 0

说明

这个方案把聚合计算和筛选逻辑放到子查询里,主查询只负责关联分支表和子查询结果,外层WHERE里都是针对单条分支的过滤条件,完全符合DataTable搜索的使用习惯。

内容的提问来源于stack exchange,提问作者Rey Chabby Estrera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:00:59