Postgresql
當offset大於max時獲取總行數
我有一個表
users
,比如說,42 條記錄。為了獲得總行數和其他一些細節,我使用了一個視窗函式:select count(*) over() as count, name, id from users
由於消費者應用程序是分頁的,我可以利用
limit
並offset
獲取所需的數據:select count(*) over() as count, name, id from users limit 5 offset 20
這給了我一個(樣本)結果:
count | name | id -------+---------+---- 42 | Dummy05 | 27 42 | Dummy06 | 30 42 | Dummy07 | 31 42 | Dummy08 | 32 42 | Dummy09 | 33 (5 rows)
當然,這可以按照這個答案中的描述進行優化。
但是,當偏移值超出時,我得到 0 行,這是正確的。
select count(*) over() as count, name, id from users limit 5 offset 50
儘管偏移量返回 0 行,有沒有辦法給我總計數?類似的東西:
count | name | id -------+---------+---- 42 | | (0 rows)
你可以適應這樣的事情:
select c.count, u.* from ( select count(*) as count from users ) as c left join ( select name, id from users order by id limit 5 offset 50 ) as u on true order by u.id ;