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

如何按列聚合布尔值统计True和False的数量?

解决方案

问题回顾

现有Output表数据:

COlAColBColC
TFT
FTF
FTF

需要按列统计'T'(True)和'F'(False)的数量,目标结果:

列名True_SumFalse_Sum
COlA12
ColB21
ColC12

原SQL错误点

你的SQL逻辑存在两个核心问题:

  1. 按colA, colB, colC分组会将每一行作为独立分组,无法实现按列汇总的需求
  2. CASE WHEN中使用OR条件,统计的是行内任意列满足条件的次数,而非单列的符合次数

正确实现方式

方式1:UNION ALL逐列统计(通用所有SQL数据库)

直接对每列单独统计后合并结果,兼容性最强:

SELECT 'COlA' AS 列名,
       SUM(CASE WHEN COlA = 'T' THEN 1 ELSE 0 END) AS True_Sum,
       SUM(CASE WHEN COlA = 'F' THEN 1 ELSE 0 END) AS False_Sum
FROM Output
UNION ALL
SELECT 'ColB' AS 列名,
       SUM(CASE WHEN ColB = 'T' THEN 1 ELSE 0 END) AS True_Sum,
       SUM(CASE WHEN ColB = 'F' THEN 1 ELSE 0 END) AS False_Sum
FROM Output
UNION ALL
SELECT 'ColC' AS 列名,
       SUM(CASE WHEN ColC = 'T' THEN 1 ELSE 0 END) AS True_Sum,
       SUM(CASE WHEN ColC = 'F' THEN 1 ELSE 0 END) AS False_Sum
FROM Output;

方式2:UNPIVOT转置后统计(适用于SQL Server、Oracle等支持UNPIVOT的数据库)

先将列转换为行结构,再分组统计,代码更简洁:

SELECT 列名,
       SUM(CASE WHEN 值 = 'T' THEN 1 ELSE 0 END) AS True_Sum,
       SUM(CASE WHEN 值 = 'F' THEN 1 ELSE 0 END) AS False_Sum
FROM Output
UNPIVOT (值 FOR 列名 IN (COlA, ColB, ColC)) AS unpvt
GROUP BY 列名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:30:56