如何对两个 SUMmed SQL 结果字段求和

Posted

技术标签:

【中文标题】如何对两个 SUMmed SQL 结果字段求和【英文标题】:How to SUM two SUMmed SQL result fields 【发布时间】: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..!

【问题讨论】:

【参考方案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 我想我想先合并,因为我想避免负交易量(不应该存在),然后对值求和。

以上是关于如何对两个 SUMmed SQL 结果字段求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中对两个结果集中的列求和

sql实现多字段求和并查询

如何在 SQL Server 中对具有相同 ID 的多行求和

Kibana两个字段求和

对两个不同查询 (SQL) 的结果求和

关于sqlserver分组求和的问题