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

SQL如何使用CASE语句实现多列分组分类计数

多字段分类统计SQL实现方案

核心思路:你已经掌握的单字段CASE WHEN返回1/0的判断逻辑,完全可以直接复用——同一分类下的统计值,本质就是把分类内每个字段的判断结果(满足值>0记1,否则记0)做算术求和,不需要编写复杂的多分支嵌套判断。

全数据库兼容通用写法

这套写法适配MySQL、PostgreSQL、SQL Server、Oracle、BigQuery等所有主流SQL引擎,不会出现语法兼容问题:

SELECT
    person_name, -- 人员姓名字段
    Red,
    Blue,
    Apple,
    Grapes,
    -- 计算颜色类统计值
    CASE WHEN Red > 0 THEN 1 ELSE 0 END
    + CASE WHEN Blue > 0 THEN 1 ELSE 0 END AS Colors,
    -- 计算水果类统计值
    CASE WHEN Apple > 0 THEN 1 ELSE 0 END
    + CASE WHEN Grapes > 0 THEN 1 ELSE 0 END AS Fruit
FROM your_sample_dataset_table; -- 替换为你的示例数据集表名

逻辑校验完全匹配需求:

  • 以John Smith的记录为例:若Red=2、Blue=3,两个字段判断都返回1,相加后Colors值为2
  • 若某条记录Red=0、Blue=4,判断后返回0+1,Colors值为1
  • 若两个颜色字段值都为0,Colors值为0
  • 水果类Fruit列的统计逻辑和颜色类完全一致

特定数据库简化写法

对于MySQL、PostgreSQL、SQLite等支持布尔值隐式转换为数值(判断为真等价于1,判断为假等价于0)的数据库,可以省略CASE语句简化代码:

SELECT
    person_name,
    (Red > 0) + (Blue > 0) AS Colors,
    (Apple > 0) + (Grapes > 0) AS Fruit
FROM your_sample_dataset_table;

注意:SQL Server、Oracle不支持布尔值直接参与算术运算,这类环境请使用前面的通用CASE写法,避免触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:26