Postgresql

當offset大於max時獲取總行數

  • January 31, 2019

我有一個表users,比如說,42 條記錄。為了獲得總行數和其他一些細節,我使用了一個視窗函式:

select count(*) over() as count, name, id from users

由於消費者應用程序是分頁的,我可以利用limitoffset獲取所需的數據:

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
;

引用自:https://dba.stackexchange.com/questions/228560