0
目前,我創建一個函數返回setof書(表)。 然後,我創建B函數返回一個表格。該表格是A的分析結果。 最後,頁面都需要A的詳細結果,並且需要B的結果作爲分析結果。 你可以看到,幾乎相同的計算兩次。 如何結合到一個功能?PostgreSQL.How如何在一個函數中輸出過濾器行和分析結果?
目前,我創建一個函數返回setof書(表)。 然後,我創建B函數返回一個表格。該表格是A的分析結果。 最後,頁面都需要A的詳細結果,並且需要B的結果作爲分析結果。 你可以看到,幾乎相同的計算兩次。 如何結合到一個功能?PostgreSQL.How如何在一個函數中輸出過濾器行和分析結果?
像這樣的問題通常的解決方案是window functions。
例如,爲了獲得一個書單,以及在商店副本的平均數量,您可以編寫一個查詢:
SELECT title, author,
avg(copies) OVER() AS copies_average
FROM books;
┌─────────────────────────────────┬─────────────────┬─────────────────────┐
│ title │ author │ copies_average │
├─────────────────────────────────┼─────────────────┼─────────────────────┤
│ The Art of Computer Programming │ Donald E. Knuth │ 72.0000000000000000 │
│ The Tao of Programming │ Geoffrey Hames │ 72.0000000000000000 │
└─────────────────────────────────┴─────────────────┴─────────────────────┘
(2 rows)
最後一列是相同的所有行,是平均值應用於完整的結果集(因爲我們使用了空的窗口定義)。
表格只被掃描一次。
你可以在你的函數A
使用這樣的查詢,而不是有一個函數B
可言。
感謝您的回答。 我知道窗口functions.But對於我的問題它不是一個解決方案。 我爲A.創建一個表,然後爲B計算它。 –