亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將常見查詢存儲為列?

將常見查詢存儲為列?

呼啦一陣風 2019-10-28 18:31:58
使用PostgreSQL,我有許多查詢如下:SELECT <col 1>, <col 2>     , (SELECT sum(<col x>)        FROM   <otherTable>         WHERE  <other table foreignkeyCol>=<this table keycol>) AS <col 3>FROM   <tbl>假設子選擇在每種情況下都是相同的,是否有一種方法可以將該子選擇存儲為表中的偽列?本質上,我希望能夠從表A中選擇一列,該列是表B中與記錄相關的特定列的總和。這可能嗎?
查看完整描述

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()的返回類型取決于您要匯總的列的類型。


查看完整回答
反對 回復 2019-10-28
?
米脂

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;

可以用這種方式定義視圖并擴展視圖,但是我認為使用函數的方法不會考慮所有相同的執行路徑,因此可能不會使用最快的執行路徑。


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 565 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號