1
假設我有創建的表如下:更新Postgres裏一列只返回錯誤一個值(Postgres的9.5.1)
create table test.sales
(
customer text,
purchased text,
date_purchased date,
rownumber integer,
primary key (customer, date_purchased)
)
;
insert into test.sales
values
('kevin', 'books', '2017-01-01'::date, null),
('kevin', 'movies', '2017-01-02'::date, null),
('paul', 'books', '2017-01-05'::date, null),
('paul', 'movies', '2017-01-07'::date, null)
在這一點上,rownumber
總是NULL
,我想設置值rownumber
與row_number() over (partition by customer order by date_purchased) as rownumber
。我要對這個方法如下:
update test.sales as a
set (rownumber) =
(
select
row_number() over (partition by customer order by date_purchased) as rownumber
from test.sales as b
-- These fields correspond to the primary keys of the table.
where a.customer = b.customer
and a.date_purchased = b.date_purchased
)
但出於某種原因,這個返回:
customer purchased date_purchased rownumber
kevin books 1/1/17 1
kevin movies 1/2/17 1
paul books 1/5/17 1
paul movies 1/7/17 1
我期待這樣的:
customer purchased date_purchased rownumber
kevin books 1/1/17 1
kevin movies 1/2/17 2
paul books 1/5/17 1
paul movies 1/7/17 2
請注意,在實際結果,rownumber
始終是1.爲什麼這是?
有趣!我是否應該擔心效率/可擴展性?我的理解是相關的子查詢不適用於大量的行。 – Vincent
測試它。 (至少結果是正確的,所以無論如何測試是沒用的......) – wildplasser