跳过PostgreSQL中的每个第n个结果行

Rob*_*ock 16 sql postgresql

我正在寻找一种在PostgreSQL中跳过行的方法.

我可以通过以下两种方式使用:

SELECT * FROM table WHERE id % 5 = 0
Run Code Online (Sandbox Code Playgroud)

但是,我必须获取顺序行才能正确跳过.例如,如果我获取行(带有ids)0,3,5,它将不会跳过5行中的4行,而是导致(ids)0和5.

或跳过SQL之外:

$count = 0;
while($row = progres_fetch_row($result))
  if ($count++ % 5 == 0)
     // do something 
Run Code Online (Sandbox Code Playgroud)

从SQL数据库获取每个第n行的最快方法是什么?

Gui*_*sel 25

如果您使用PostgreSQL,您可以使用row_number():

SELECT t.*
FROM (
  SELECT *, row_number() OVER(ORDER BY id ASC) AS row
  FROM yourtable
) t
WHERE t.row % 5 = 0
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,这是(ANSI)标准SQL(模运算符除外)并适用于各种DBMS - 只是不适用于MySQL (2认同)