在 sql (derby) 数据库的 2 个不同列中计算布尔值

counting booleans in 2 different columns of sql (derby) database

我是 Java 和 SQL 的新手,被混淆了我的数据的查询难住了。 我有一个简单的 table,包含 3 列(IDI(整数)、column1(bool)、column2(bool))。

我提出了会成功但数据在 2 个布尔列之间复制的查询。如果我从布尔值中执行 select * 所有数据都是正确的,但是当我编写查询来计算(总计)每一列时,总计结果是否相同?

当我 运行 这个查询时,我得到了如图所示的正确结果;

select * from booleans order by idi

但是,当我尝试对两列进行计数和分组时,它们的数据相同。每列应该在一列中有一个数字,在另一列中有一个 0。这是结果的代码和图片:

select idi, count(column1) as "Column 1", count(column2) as "Column2" 
from booleans  
group by idi

对于为什么这在聚合 table 中显示不正确的任何理论,我将不胜感激。

为了仅计算 true 个值,排除 false 个值,您可以执行以下操作:

select idi,
  sum(case when column1 then 1 else 0 end) as count1,
  sum(case when column2 then 1 else 0 end) as count2
from booleans
group by idi

详细说明:count(*) 计算有多少 non-null 个值。对于此函数,值是 true 还是 false.

并不重要