postgres视图中的临时序列

时间:2013-08-31 16:21:22

标签: sql postgresql

我有一张桌子,经常以某种方式订购。该排序是我们可以称为排名的派生列的基础。如果我查询整个表,我可以让数据库为我计算排名:

CREATE TEMP SEQUENCE the_seq;
SELECT my_table.foo, my_table.bar, nextval('the_seq') AS rank
FROM my_table
ORDER BY my_table.bar DESC;

这产生了有用的结果,如:

foo  | bar  | rank
-------------------
0005 | 2100 | 1
0003 | 1632 | 2
0002 | 1200 | 3
0001 | 899  | 4
0004 | 500  | 5

使用该结果集,我可以确定任何foo的等级。然而,这需要我查询整个表并迭代结果集,即使我只想要foo'0001'的等级。

理想情况下,我会有一个为我排名列的视图,所以我可以任意说:

SELECT my_table_vw.foo, my_table_vw.bar, my_table_vw.rank
FROM my_table_vw
WHERE my_table_vw.foo = '0001'

然后得到

foo  | bar  | rank
-------------------
0001 | 899  | 4

但是我不知道如何在数据库中构造它,因为视图不能在它们的定义中构造临时序列。我甚至想做什么?我觉得必须这样做是因为替代方案,保持插入排名或查询整个表格似乎很荒谬。

1 个答案:

答案 0 :(得分:6)

使用row_number()

而不是使用序列
SELECT my_table.foo, my_table.bar, row_number() over (order by my_table.bar desc) as rank
FROM my_table;

您可以将其放入视图中。