【问题标题】:Select sum based on value of other column根据其他列的值选择总和
【发布时间】:2021-08-03 12:46:51
【问题描述】:

我有一个表,其中包含类似的值

ID | CODE | QUANTITY
====================
1  | 2    | 20
2  | 2    | 40
3  | 5    | 10
4  | 6    | 15
5  | 5    | 20
6  | 6    | 50
7  | 6    | 10
8  | 7    | 20
9  | 8    | 100

我需要得到“CODE”= 2 的所有数量的总和。但是,如果总和为 0 然后返回 (5,6) 中“CODE”的所有数量的总和。这个想法是忽略除 2、5 和 6 之外的所有其他代码,将 2 作为 sum 的首选。

我试过了

WITH CTE AS(
SELECT
    SUM(CASE WHEN CODE = '2' THEN QUANTITY ELSE 0 END) AS QUANTITY1,
    SUM(CASE WHEN CODE IN ('5', '6') THEN QUANTITY ELSE 0 END) AS QUANTITY2
FROM TABLE1
)
SELECT CASE
            WHEN QUANTITY1 <> 0 THEN QUANTITY1
            ELSE QUANTITY2
        END
FROM CTE

它确实有效,但我觉得它可以改进并且可以用最少的步骤完成。我该如何改进它?

Edit1:在 TABLE1 中 QUANTITY 列的值可以为 0 编辑2:sqlfiddle

【问题讨论】:

    标签: sql db2 case common-table-expression db2-luw


    【解决方案1】:

    对于带有CODE = '2' 的数量的总和,在CASE 表达式和NULLIF() 中使用ELSE 0,这样即使总和是0,结果也是NULL

    SELECT COALESCE(
             NULLIF(SUM(CASE WHEN CODE = '2' THEN QUANTITY ELSE 0 END), 0),
             SUM(CASE WHEN CODE IN ('5', '6') THEN QUANTITY END)
           )
    FROM TABLE1
    

    您也可以使用ELSE 来表示CODE IN ('5', '6') 的数量:

    SELECT COALESCE(
             NULLIF(SUM(CASE WHEN CODE = '2' THEN QUANTITY ELSE 0 END), 0),
             SUM(CASE WHEN CODE IN ('5', '6') THEN QUANTITY ELSE 0 END)
           )
    FROM TABLE1
    

    请参阅demo

    【讨论】:

      【解决方案2】:

      如果基础表中数量始终大于0,则可以使用COALESCE()

      SELECT COALESCE(SUM(CASE WHEN CODE = '2' THEN QUANTITY END) AS QUANTITY1,
                      SUM(CASE WHEN CODE IN ('5', '6') THEN QUANTITY END),
                      0) AS QUANTITY2
      FROM TABLE1
      

      【讨论】:

      • 数量可以为 0。如果 CODE =2 的所有数量之和为 0,这似乎不起作用。
      • 我想可以通过添加非零检查来解决。 sqlfiddle.com/#!9/08b697/1
      • @bluelurker 。 . .具体条件我不是很清楚。应该是数量总是大于零。使用像 quantity 这样的名称似乎是一个合理的假设。
      猜你喜欢
      • 1970-01-01
      • 2022-07-06
      • 2018-09-24
      • 2020-03-07
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2021-07-11
      • 2021-09-18
      相关资源
      最近更新 更多