使用 UNION 从同一个表中减去 2 个值

问题描述

我希望我能在这里得到一些帮助,因为我想不出别的了。

所以我有 2 个结果来自同一个表,我想在一个查询中看到这些结果……所以我使用了 UNION,直到那里都很好,现在我需要这两个结果之间的差异。假设我有一个结果:

measure         30_days
old_purchases   342     
new_purchases   54     

我需要一个新行来区分这两者之间的区别,例如:

measure         30_days   
old_purchases   342      
new_purchases   54      
difference      288   

解决方法

您可以使用条件聚合:

select measure,value
from t
union all
select 'difference',sum(case when measure = 'old_purchases' then value
                when measure = 'new_purchases' then - value
                else 0
           end)
from t;

如果您确实想将其添加到表中,请使用 insert

insert into t (measure,value)
    select 'difference',sum(case when measure = 'old_purchases' then value
                    when measure = 'new_purchases' then - value
                    else 0
               end)
    from t;