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

wdebmtf2  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(219)

我是java和sql的新手,被一个混淆了我的数据的查询难住了。我有一个包含3列的简单表(idi(integer)、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


我将感谢任何理论,为什么这是显示不正确的汇总表。

daolsyd0

daolsyd01#

为了只数 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 .

相关问题