PostgreSQL。如何在一个函数中输出过滤行和分析结果?

时间:2017-07-19 01:37:46

标签: postgresql plpgsql

目前,我创建了一个返回setof books(一个表)的函数。 然后,我创建了B函数,它返回一个表。该表是A的分析结果。 最后,页面都需要A的结果以获取详细信息,并且需要B的结果用于分析结果。 你可以看到几乎相同的计算两次。 如何结合一个功能?

1 个答案:

答案 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