目前,我创建了一个返回setof books(一个表)的函数。 然后,我创建了B函数,它返回一个表。该表是A的分析结果。 最后,页面都需要A的结果以获取详细信息,并且需要B的结果用于分析结果。 你可以看到几乎相同的计算两次。 如何结合一个功能?
答案 0 :(得分:0)
这类问题的常见解决方案是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
。