PAGE句では、返すレコードのサブセットを指定します。
デフォルトでは、すべての結果レコードが返されます。しかし場合によっては、その結果のサブセットのみをリクエストするほうが便利です。このような場合は、PAGE (<offset>, <count>)句を使用して、返す結果レコードの数を指定します。
<offset>引数は、スキップするレコードの数を指定する整数です。オフセットを0にすると最初の結果レコードが返され、オフセットを8にすると9番目が返されます。<count>引数は、返すレコードの数を指定する整数です。
次に示す例では、NavStateRecordsをSalesRep属性でグルーピングし、結果レコード11-20を返します。
DEFINE Reps AS GROUP BY SalesRep PAGE (10,10)
PAGEは中間結果に適用されます。FROMで指定された文でPAGE(0, 10)が指定されている場合は、ソース・レコードの数は10個が上限になります。
PAGE句をORDER BY句と組み合せると、上位K件の問合せを作成できます。次に示す例では、売上合計上位10名の販売員が返されます。
DEFINE Reps AS SELECT SUM(Amount) AS Total GROUP BY SalesRep ORDER BY Total DESC PAGE (0,10)
PAGE句では、PERCENT修飾子がサポートされます。PERCENTが指定されているときは、オフセットとサイズに小数を使用できます。たとえば、PAGE(33.3, 0.5) PERCENTです。これは、データセットのどの部分をスキップし、どの部分を返すかを指定するものです。
スキップされるレコードの数は、round(offset * COUNT / 100)です。
返されるレコードの数は、round((offset + size) * COUNT / 100) - round(offset * COUNT / 100)です。
DEFINE "ModelYear" AS SELECT SUM(Cost) AS Cost GROUP BY Model, Year ORDER BY Cost DESC PAGE(0, 10) PERCENT
PERCENTキーワードを指定すると、オーバーラップしないオフセットにおいてレコードが繰り返されることはありませんが、指定のページ・サイズに対する結果の数は、同じ問合せでも変動することがあります。
たとえば、if COUNT = 6であるとします。
PAGE句 | 同じ動作となる指定方法 |
---|---|
PAGE (0, 25) PERCENT | PAGE (0, 2) |
PAGE (25, 25) PERCENT | PAGE (2, 1) |
PAGE (50, 25) PERCENT | PAGE (3, 2) |
PAGE (75, 25) PERCENT | PAGE (5, 1) |