我有一张表格,我经常按某种方式进行排序。这个排序是派生列的基础,我们可以称之为排名。如果我查询整个表格,我可以让数据库为我计算出这个排名:
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”的排名。但是这需要我查询整个表格并且必须遍历结果集,即使我只想要“0001”“foo”的排名。
理想情况下,我希望有一个视图来为我完成排名列,这样我就可以任意指定:
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
但是我不知道如何在数据库中构建它,因为视图无法在其定义中构建临时序列。我尝试做的事情是可能的吗?我觉得它必须是,因为其他选择,例如在插入时维护排名或查询整个表似乎都很荒谬。