计算条件下的总行数和行数
Posted
技术标签:
【中文标题】计算条件下的总行数和行数【英文标题】:Counting total rows and rows under condition 【发布时间】:2021-03-24 12:16:45 【问题描述】:我的table1
看起来像:
docid val1 val2 val3 value
----------------------------------
001 1 1 null 10
001 null null null 5
001 1 null 1 20
001 1 null null 7
001 null null null 15
002 null null 1 30
002 null null null 2
我需要作为输出:
每docid
docid
存在的总行数
以及这些行的 value
的总和
符合条件的行数:val1 = 1 or val2 = 1 or val3 = 1
以及这些行的 value
的总和
如下:
docid total_rows total_rows_value rows_with_val val_rows_value
001 5 57 3 37
002 2 1 32 2
到目前为止我所拥有的:
select [docid],
count(1) as [rows_with_val],
sum([value]) as [val_rows_value]
from table1
where val1 = 1 or val2 = 1 or val3 = 1
group by [docid]
;
不过,这只会命中。我怎样才能兼顾两者?我通过删除 where 子句来理解,但是我应该把它放在哪里呢?我一直在阅读 case 语句(在我的选择中),但不知道如何在此处应用它。
【问题讨论】:
【参考方案1】:您可以使用条件聚合:
select docid, count(*) total_rows, sum(value) as sum_value,
sum(case when 1 in (val1, val2, val3) then 1 else 0 end) as cnt_val1,
sum(case when 1 in (val1, val2, val3) then value else 0 end) as sum_val1
from mytable
group by docid
【讨论】:
以上是关于计算条件下的总行数和行数的主要内容,如果未能解决你的问题,请参考以下文章