3 回答
TA贡献1757条经验 获得超8个赞
除了视图之外,您还可以创建一个用于求和的函数。
CREATE FUNCTION sum_other_table( key type_of_key ) RETURNS bigint
AS $$ SELECT sum( col_x ) FROM table_1 where table_1.key = key $$ LANGUAGE SQL;
然后将其用作您的聚合器:
SELECT col_1, col_2, sum_other_table( key ) AS col_3
FROM table_2 WHERE table_2.key = key;
请注意,sum_other_table()的返回类型取决于您要汇总的列的类型。
TA贡献1836条经验 获得超3个赞
到目前为止,有三个答案,所有答案都有效。根据情况,其中任何一个都可能是“最佳解决方案”。对于小型表,性能应该非常接近,但是它们都不大可能很好地扩展到具有数百万行的表。使用大型数据集获得理想结果的最快方法可能是(使用Erwin的设置):
SELECT a_id, col1, col2, sum(colx)
FROM tbl_a LEFT JOIN tbl_b b using(a_id)
GROUP BY a_id, col1, col2;
如果将if a_id声明为主键,并且该键在9.1或更高版本下运行,则该GROUP BY子句可以简化,因为col1并且col2在功能上依赖于a_id。
SELECT a_id, col1, col2, sum(colx)
FROM tbl_a LEFT JOIN tbl_b b using(a_id)
GROUP BY a_id;
可以用这种方式定义视图并扩展视图,但是我认为使用函数的方法不会考虑所有相同的执行路径,因此可能不会使用最快的执行路径。
添加回答
举报