我有一个简单的表odd_nums
,其中包含列num
和odd
:
create table odd_nums
(
num numeric,
odd numeric
);
INSERT INTO odd_nums VALUES (0, 0);
INSERT INTO odd_nums VALUES (1, 1);
INSERT INTO odd_nums VALUES (2, 0);
INSERT INTO odd_nums VALUES (3, 1);
我正在玩弄窗口函数。该查询产生预期结果:
SELECT num,
FIRST_VALUE(num) OVER (PARTITION BY odd) a,
FIRST_VALUE(num) OVER (PARTITION BY odd) b
FROM odd_nums;
编号 | A | 乙 |
---|---|---|
0 | 0 | 0 |
2 | 0 | 0 |
1 | 1 | 1 |
3 | 1 | 1 |
当我在列中订购分区时,b
结果会发生如下变化:
SELECT NUM,
FIRST_VALUE(num) OVER (PARTITION BY odd) a,
FIRST_VALUE(num) OVER (PARTITION BY odd ORDER BY num DESC) b
FROM odd_nums;
编号 | A | 乙 |
---|---|---|
2 | 2 | 2 |
0 | 2 | 2 |
3 | 3 | 3 |
1 | 3 | 3 |
列b
是我所期望的,但为什么列a
也发生变化?
有人可以帮助我理解为什么ORDER BY num DESC
在第二个窗口函数中添加该子句会导致第一个窗口函数发生变化吗?是否有一些特定的数据库实现细节或优化可能会影响结果?
我浏览了 PostgreSQL 文档但没有成功。