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

如何在SQL中统计每种布尔组合对应的匹配行数?

解决布尔组合对应计数的问题

你的问题核心在于:之前的子查询没有和外层的每一行布尔组合建立关联,所以它每次都会返回全表的总记录数,而不是当前行对应布尔组合的统计值。下面给你几种可行的解决方案:

方法1:条件聚合(最简洁高效)

直接在SELECT语句中使用CASE WHEN配合聚合函数,针对每一行的布尔组合统计对应的数据量:

假设你的原始数据存储在your_table表中,布尔组合表是你给出的四行数据(如果这个组合表是临时的,也可以用子查询生成),SQL代码如下:

SELECT
  t1.Column_A,
  t1.Column_B,
  SUM(CASE WHEN t2.Column_A = t1.Column_A AND t2.Column_B = t1.Column_B THEN 1 ELSE 0 END) AS Column_C
FROM
  (-- 生成所有布尔组合的数据集
   SELECT True AS Column_A, True AS Column_B UNION ALL
   SELECT True, False UNION ALL
   SELECT False, True UNION ALL
   SELECT False, False
  ) t1
CROSS JOIN your_table t2
GROUP BY t1.Column_A, t1.Column_B;

也可以用COUNT简化写法(CASE不满足条件时返回NULL,COUNT会自动忽略NULL值):

SELECT
  t1.Column_A,
  t1.Column_B,
  COUNT(CASE WHEN t2.Column_A = t1.Column_A AND t2.Column_B = t1.Column_B THEN 1 END) AS Column_C
FROM
  (SELECT True AS Column_A, True AS Column_B UNION ALL
   SELECT True, False UNION ALL
   SELECT False, True UNION ALL
   SELECT False, False
  ) t1
CROSS JOIN your_table t2
GROUP BY t1.Column_A, t1.Column_B;

方法2:关联子查询(明确绑定行关系)

给子查询加上和外层行的关联条件,确保子查询只统计当前行对应的布尔组合:

SELECT
  t1.Column_A,
  t1.Column_B,
  (SELECT COUNT(*) 
   FROM your_table t2 
   WHERE t2.Column_A = t1.Column_A 
     AND t2.Column_B = t1.Column_B) AS Column_C
FROM
  (SELECT True AS Column_A, True AS Column_B UNION ALL
   SELECT True, False UNION ALL
   SELECT False, True UNION ALL
   SELECT False, False
  ) t1;

这里的关键是用表别名t1(外层组合表)和t2(原始数据表),在子查询的WHERE子句中绑定两者的Column_A和Column_B,让子查询只返回当前行对应布尔组合的计数。

方法3:先分组统计再关联

先对原始数据表按Column_A和Column_B分组计数,再和你的布尔组合表做左连接,确保所有组合都能被返回(即使原始表中没有对应组合,计数会显示为0):

SELECT
  t1.Column_A,
  t1.Column_B,
  COALESCE(t2.count_num, 0) AS Column_C
FROM
  (SELECT True AS Column_A, True AS Column_B UNION ALL
   SELECT True, False UNION ALL
   SELECT False, True UNION ALL
   SELECT False, False
  ) t1
LEFT JOIN (
  SELECT Column_A, Column_B, COUNT(*) AS count_num
  FROM your_table
  GROUP BY Column_A, Column_B
) t2 ON t1.Column_A = t2.Column_A AND t1.Column_B = t2.Column_B;

用COALESCE可以把原始表中无对应组合时的NULL值转换成0,更符合统计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:02:32