计算条件下的总行数和行数

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

【讨论】:

以上是关于计算条件下的总行数和行数的主要内容,如果未能解决你的问题,请参考以下文章

在Java中,如何通过在数据库得到的结果集得到表的列数和行数?

如何使用 Perl 计算文件中的字符、单词和行数?

如何在 data.table 中返回行数和行数?

Git:在日期范围内更改的平均行数和总行数

git统计代码工程总行数和细分每个代码文件行数

LINUX查看文件总行数和指定行