微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算sqlderby数据库的2个不同列中的布尔值

如何解决计算sqlderby数据库的2个不同列中的布尔值

我是Java和sql的新手,却被混合我的数据的查询所困扰。 我有一个包含3列的简单表(IDI(整数),column1(布尔),column2(布尔))。

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

运行此查询时,我得到正确的结果,如图所示;

select * from booleans order by idi

enter image description here

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

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

enter image description here

我很高兴有任何理论解释为什么它在汇总表中显示不正确。

解决方法

为了只计算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都没关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。