26

PostgreSQL で行をスキップする方法を探しています。

これを行うには、次の 2 つの方法を使用します。

SELECT * FROM table WHERE id % 5 = 0

ただし、適切にスキップするには、連続した行をフェッチする必要があります。たとえば、(ID を持つ) 0、3、5 の行をフェッチすると、5 行のうち 4 行はスキップされず、(ID) 0 と 5 になります。

または、SQL の外をスキップします。

$count = 0;
while($row = progres_fetch_row($result))
  if ($count++ % 5 == 0)
     // do something 

SQL データベースから n 行ごとに取得する最速の方法は何ですか?

4

3 に答える 3

-1

などのランキング関数にアクセスできない場合に備えて、一般的でおそらく非常に遅い解決策を次に示しますrow_number()。したがって、MySQL では次のように記述します。

select * 
from x x1
where (
  select count(*) 
  from x x2 
  where x2.id <= x1.id
) % 5 <> 0
order by x1.id asc

さらに述語を追加したい場合は、それらを外側と内側の両方のクエリに必ず追加してください。

select * 
from x x1
where x1.id % 2 = 0
and (
  select count(*) 
  from x x2 
  where x1.id % 2 = 0
  and x2.id <= x1.id
) % 5 <> 0
order by x1.id asc

備考:

  • 内側のクエリには、外側のクエリと同じテーブル参照と述語が必要です
  • 内側のクエリは、外側のクエリからの現在の行の「前」の行数をカウントする必要があります。「前」は、外側のクエリのORDER BY句によって定義されます
于 2013-10-25T18:34:40.500 に答える