【问题标题】: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 语句(在我的选择中),但不知道如何在此处应用它。

【问题讨论】:

    标签: sql sql-server count pivot aggregate-functions


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2019-11-28
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多