Postgres - 重复选择多个表并加入

时间:2015-09-17 23:35:29

标签: postgresql

我们使用的产品会在不同的表格中存储不同年份的相同数据 - 即Test2015Test2016等。不幸的是,我没有办法影响数据的方式存储

我目前有一个工作查询,它​​从表中提取列并将数据联合到一个数据源中(请参阅下面的伪代码),以便更容易地分析多年。

目前我只有几年的数据,但随着时间的推移,我们将积累更多的数据。有没有简单的方法来迭代这种类型的查询而不必重复代码行?

干杯, 乔纳森

WITH
  2015data AS (SELECT Name, Score, Year FROM Test2015),
  2016data AS (SELECT Name, Score, Year FROM Test2016)

SELECT * FROM 2015data

UNION ALL

SELECT * FROM 2016data

1 个答案:

答案 0 :(得分:0)

不,没有简单的方法可以自动完成。但是当你说'#34;将数据合并到一个数据源"时,你的意思是你创建了一个视图吗?如果是这样,那么您只需每年更新一次视图以包含新表。如果没有,那么我建议你这样做:

CREATE VIEW TestAll AS
  SELECT * FROM (SELECT Name, Score, Year FROM Test2015) 2015data
  UNION ALL
  SELECT * FROM (SELECT Name, Score, Year FROM Test2016) 2016data;
  -- Add more years as the tables are created

不理想,但也不太难维护。

在您的分析中,您现在只需使用TestAll视图,例如:

SELECT Name, avg(Score)
FROM TestAll
WHERE Year < date_trunc('year', CURRENT_DATE) - 2
GROUP BY Name;