首页 > 解决方案 > Postgres数据库中2个表中列平均值的差异

问题描述

我已经根据一列的平均值将一个表拆分为 2,现在我想计算新表中其他列的平均值的差异。

例如(简化示例,我的数据有 5 列)

t1 =      'id', 'price', 'size'

           1 ,  10.0,     3    

          ...,   ...,    ...   

           10,   6.50,    8       

t2 =      'id', 'price', 'size'

           11 ,  12.12,   3    

          ...,   ...,    ...  

           20,   3.50,    5    '

diff_table  =  'diff_price'               ,'diff_size'

               t1.avg_price - t2.avg_price, t1.avg_size - t2.avg_size

标签: postgresql

解决方案


嗯,很简单:

SELECT
    avg(t1.price) - avg(t2.price) AS diff_price,
    avg(t1.size) - avg(t2.size) AS diff_size
FROM t1, t2;

示例:https ://www.db-fiddle.com/f/eXuc1bUyxAHhWo2Yu91GMt/0

如果您需要将该数据放入新表中,只需使用显式列类型比例执行以下操作):

CREATE TABLE diff_table AS
SELECT
    (avg(t1.price) - avg(t2.price))::decimal(10,2) AS diff_price,
    (avg(t1.size) - avg(t2.size))::decimal(10,2) AS diff_size
FROM t1, t2;

...结果:

                  Table "public.diff_table"
   Column   |     Type      | Collation | Nullable | Default 
------------+---------------+-----------+----------+---------
 diff_price | numeric(10,2) |           |          | 
 diff_size  | numeric(10,2) |           |          | 


推荐阅读