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

Java 在sql(derby)数据库的两个不同列中计算布尔值,java,sql,database,derby,Java,Sql,Database,Derby,我不熟悉Java和SQL,并且被一个混合了我的数据的查询难住了。 我有一个包含3列的简单表(IDI(整数)、column1(bool)、column2(bool)) 我提出的查询将成功,但数据将在两个布尔列之间复制。如果我从布尔值中选择*,所有数据都是正确的,但是当我写一个查询来计算(总计)每一列时,总计结果是一样的吗 当我运行这个查询时,我得到了正确的结果,如图所示 select * from booleans order by idi 但是,当我尝试计数和分组时,两列都有相同的数据。每列

我不熟悉Java和SQL,并且被一个混合了我的数据的查询难住了。 我有一个包含3列的简单表(IDI(整数)、column1(bool)、column2(bool))

我提出的查询将成功,但数据将在两个布尔列之间复制。如果我从布尔值中选择*,所有数据都是正确的,但是当我写一个查询来计算(总计)每一列时,总计结果是一样的吗

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

select * from booleans order by idi

但是,当我尝试计数和分组时,两列都有相同的数据。每列的一列中应有一个数字,另一列中应有一个0。以下是结果的代码和图片:

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


我希望您能提供一些理论来解释为什么在聚合表中显示不正确。

为了只计算
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(*)
统计有多少非空值。对于此函数,值是
true
还是
false

无关紧要,数据库正在计算有多少值(true或false)。您可能需要知道有多少个
true
值。。。