在 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
.
并不重要
我是 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
.