按sql分组的年度表的聚合变化(monetdb)
我的数据包括许多工人的年度表格(例如,按sql分组的年度表的聚合变化(monetdb),sql,group-by,aggregate-functions,sql-view,monetdb,Sql,Group By,Aggregate Functions,Sql View,Monetdb,我的数据包括许多工人的年度表格(例如,file2006,file2007),包括雇主ID和公司ID。我还通过一些计算(下面的组)查看了集团公司,这些计算似乎很好,因此没有显示。然而,我认为我可以通过使用下面的代码进行分组来计算2006年至2007年各公司总工资账单的变化。这并不是对以前的视图进行快速计算,而是使系统长时间停滞,最后出现一些关于映射问题的错误消息。那么正确的方法是什么呢 CREATE VIEW sys.change2007 (firmid,groups,wagebillchange
file2006
,file2007
),包括雇主ID和公司ID。我还通过一些计算(下面的组
)查看了集团公司,这些计算似乎很好,因此没有显示。然而,我认为我可以通过使用下面的代码进行分组来计算2006年至2007年各公司总工资账单的变化。这并不是对以前的视图进行快速计算,而是使系统长时间停滞,最后出现一些关于映射问题的错误消息。那么正确的方法是什么呢
CREATE VIEW sys.change2007 (firmid,groups,wagebillchange) AS (
SELECT file2006.firmid,MAX(groups.groups), (
SELECT SUM(file2007.wage)/SUM(file2006.wage) FROM file2006, file2007
WHERE file2006.firmid = file2007.firmid
)
FROM file2006, file2007, groups
WHERE file2006.firmid = file2007.firmid AND file2006.peorglopnr = groups.firmid
GROUP BY file2006.firmid
);
决不能在
from子句中使用,
s。在你的例子中,问题是因为你在做一个笛卡尔积,从一年到下一年,每个公司的员工。因此,如果一家公司每年有100名员工,那么您需要为该公司处理10000行
解决方案是预先聚合结果。您应该能够这样做:
SELECT f006.firmid, f2007.wage / f2006.wage as ratio
FROM (select firmid, sum(wage) as wage
from file2006
group by firmid
) f2006 join
(select firmid, sum(wage) as wage
from file2007
group by firmid
) f2007
on f2006.firmid = f007.firmid;
我无法从您的查询中看出组
表的意图,但您应该能够在此基础上进行构建。谢谢,但我在这个表中发现一个错误,告诉我选择标识符(firmid)不明确…(我也有兴趣加入groups表,它已经聚合到firmids,但我无法让它工作,我总是得到子查询表需要别名,
,即使我以类似方式扩展了您的示例。)select
语句是错误的,因为聚合是在子查询中完成的。这基本上回答了原来的问题。虽然如果我只要求select AVG(ratio),我会得到一个除以零的错误从wagebillchange_2007
中,在使用select创建的视图上,我不明白为什么以前不会发生这种情况(分区在视图中),那么为什么部门对生成NAs的能力不强呢?哦,如果我尝试加入组
表,我仍然会得到子查询引用表需要一个引用
错误,但是我可以为这个问题提出一个新问题…