【问题标题】:How to SUM two SUMmed SQL result fields如何对两个 SUMmed SQL 结果字段求和
【发布时间】:2020-10-28 21:17:51
【问题描述】:

我有一个简单的表结构,其中包含 reagent_bottlesreagent_aliquots 的记录。

等分试样是从瓶子创建的,并且等分试样记录有一个外键,bottle_id,到一个瓶子 id。

要获得特定试剂的总体积(计算瓶子中的体积和等分试样中的体积),以下查询部分完成了这项工作:

SELECT  
      COALESCE(SUM(rb.volume), 0) AS bVolume, 
      COALESCE(SUM(ra.volume), 0) AS aVolume
FROM reagent_bottles AS rb
LEFT JOIN 
      reagent_aliquotes AS ra
ON rb.id = ra.bottle_id
WHERE reagent_id = 408;

返回上述试剂 id (408):

bVolume | aVolume
       2|       6

添加 bVolume 和 aVolume,是正确答案,即 8。

问题是,如何重写上述查询以创建一个新字段total_volume,在查询中求和 bVolume 和 aVolume?

我试过这个:

SELECT  
      COALESCE(SUM(rb.volume), 0) AS bVolume , 
      COALESCE(SUM(ra.volume), 0) AS aVolume, 
      SUM(bVolume + aVolume) AS total_volume
FROM 
      reagent_bottles AS rb
LEFT JOIN 
      reagent_aliquotes AS ra
ON rb.id = ra.bottle_id
WHERE reagent_id = 408;

但出现错误,未知列,字段列表中的 bVolume..!

【问题讨论】:

    标签: mysql sql sum left-join where-clause


    【解决方案1】:

    对原始列求和:

    SELECT  
          COALESCE(SUM(rb.volume), 0) AS bVolume , 
          COALESCE(SUM(ra.volume), 0) AS aVolume, 
          SUM(COALESCE(rb.volume, 0) + COALESCE(ra.volume, 0)) AS total_volume
    FROM 
          reagent_bottles AS rb
    LEFT JOIN 
          reagent_aliquotes AS ra
    ON rb.id = ra.bottle_id
    WHERE reagent_id = 408;
    

    【讨论】:

    • 这提出了一个有趣的问题,即 OP 想要 COALESCE 的值。 SUM(COALESCE... + COALESCE...) 将产生与 COALESCE(SUM...) + COALESCE(SUM...) 不同的结果
    • @e_i_pi 我想我想先合并,因为我想避免负交易量(不应该存在),然后对值求和。
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多