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