首页 > 解决方案 > 从 SQL 中的每一列中减去聚合函数

问题描述

我正在尝试为 SQL 表的每一列组合相应列中的聚合函数。例如,如果我想减去每列的平均值,我可以用每列的子查询来做

SELECT 
       col1 - (SELECT AVG(col1) FROM table), 
       col2 - (SELECT AVG(col2) FROM table),
       col3 - (SELECT AVG(col3) FROM table)
FROM table;

但是,如果表中有很多列,这很麻烦,并且需要一一写出列名。有没有办法简化代码,或者使用别名使其更清晰?

标签: sqlpostgresql

解决方案


使用窗口函数:

SELECT col1 - AVG(col1) OVER (),
       col2 - AVG(col2) OVER (),
       col3 - AVG(col3) OVER ()
FROM table;

推荐阅读