Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列值及其子列的SQL计数_Sql_Group By_Db2 - Fatal编程技术网

列值及其子列的SQL计数

列值及其子列的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

我在DB2数据库中有一个表,如下所示:

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