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

按文化分组统计标记为“good”的食品数量的SQL问题

解决按文化分组统计"good"食品数量的SQL问题

问题原因

你之前的语句用COUNT(good = 1)或COUNT(good = true)之所以不对,是因为COUNT()会统计所有非NULL的结果。而good = 1的判断结果要么是true要么是false,这两个值都不属于NULL,所以不管good是0还是1,所有行都会被计入统计,自然得到的是每组的总记录数,而非"good"食品的数量。

正确写法

这里提供三种可行的方案,按需选择:

  • 方案一:用SUM替代COUNT(最简洁)
    利用数值计算中布尔值true等价于1、false等价于0的特性,直接求和得到符合条件的数量:

    SELECT SUM(good = 1) AS good_food_count, culture 
    FROM animals_db.foods 
    GROUP BY culture;
    

    如果你的good字段本身就是布尔类型,还可以简化成:

    SELECT SUM(good) AS good_food_count, culture 
    FROM animals_db.foods 
    GROUP BY culture;
    
  • 方案二:CASE表达式配合COUNT
    通过CASE只在条件满足时返回非NULL值,让COUNT只统计符合要求的记录:

    SELECT COUNT(CASE WHEN good = 1 THEN 1 END) AS good_food_count, culture 
    FROM animals_db.foods 
    GROUP BY culture;
    
  • 方案三:先过滤再统计(仅适用于不需要保留无"good"食品的分组)
    如果你的需求只关注有"good"食品的文化分组,可以先用WHERE过滤掉不符合条件的记录,再分组统计:

    SELECT COUNT(*) AS good_food_count, culture 
    FROM animals_db.foods 
    WHERE good = 1 
    GROUP BY culture;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:31:02