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;
可以用這種方式定義視圖并擴展視圖,但是我認為使用函數的方法不會考慮所有相同的執行路徑,因此可能不會使用最快的執行路徑。
添加回答
舉報
