列值及其子列的SQL计数
我在DB2数据库中有一个表,如下所示:列值及其子列的SQL计数,sql,group-by,db2,Sql,Group By,Db2,我在DB2数据库中有一个表,如下所示: StatusCode | IsResolved | IsAssigned ABC | Y | ABC | N | ABC | | ADEF | Y | ADEF | | Y 我希望通过以下方式获取数据: StatusCode |Count of Status Co
StatusCode | IsResolved | IsAssigned
ABC | Y |
ABC | N |
ABC | |
ADEF | Y |
ADEF | | Y
我希望通过以下方式获取数据:
StatusCode |Count of Status Code| Count of Resolved with value Y| Count of Assigned With value Y
ABC | 3 | 1 | 0
ADEF | 2 | 1 | 1
我可以使用groupBy
获取状态代码的计数,但我不确定如何获取同一查询中解析和分配的计数数据
Query: select statusCode,count(statusCode) from table group by statusCode
有人能帮助我如何获取已解析和分配的计数吗
问题解决方案:Christian和JPW:解决方案是使用sum(当'Y'然后1或0结束时,案例解决)尝试使用
select statusCode, count(statusCode),
sum(case IsResolved when 'Y' then 1 else 0 end),
sum(case IsAssigned when 'Y' then 1 else 0 end)
from table
group by statusCode
获得所需结果的一种方法是使用条件聚合(使用谓词确定如何聚合数据),如下所示:
select
StatusCode,
count(*) as "Count of Status Code",
sum(case when IsResolved = 'Y' then 1 else 0 end) as "Count of Resolved with value Y",
sum(case when IsAssigned = 'Y' then 1 else 0 end) as "Count of Assigned With value Y"
from your_table
group by StatusCode;
case表达式构造(
case…when…then..end
)是ANSI SQL标准的一部分,因此这应该适用于任何兼容的数据库。您可以使用SUM()和case来实现这一点
这里有一个相关的问题:我想前面的答案使用了总和,因为缺少的值是未知的。如果缺少的值是空值,则每个值都可以被编码为计数,其效果与总和相同。
如果OP中给出的“我有一个表”中缺少的值是空值,和如果[有效地满足数据或实际存在]对的检查约束是
in('Y','N')
,则与其他答案类似,但执行计数并使用NULLIF作为case表达式的简化/特殊case效果:
select
statuscode as "StatusCode"
, count(*) as "Count of Status Code"
, count(nullif(isResolved,'N')) as "Count of Resolved with value Y"
, count(nullif(isAssigned,'N')) as "Count of Assigned with value Y"
from so39705143
group by statuscode
order by statuscode
我删除了不兼容的数据库标记。请用您真正使用的数据库标记该问题。在给定的数据中[按给定的文本与DML插入],每个不可见的值是假定为空字符串还是空值?只是一个后续问题,我们还可以使用Case获得值,例如:Count where isResolved!='你和我被分配了Y'@JashanPreet-是鉴于半个多小时前发布的要求,有两个答案在功能上是相同的,而且更正确——你为什么发布这个答案?
select
statuscode as "StatusCode"
, count(*) as "Count of Status Code"
, count(nullif(isResolved,'N')) as "Count of Resolved with value Y"
, count(nullif(isAssigned,'N')) as "Count of Assigned with value Y"
from so39705143
group by statuscode
order by statuscode