PAGE句では、返すレコードのサブセットを指定します。
<offset>が使用可能なレコードの合計数より大きい場合、空の表が返されます。ただし、<offset> + <count>が使用可能なレコードの合計数より大きい場合、可能なかぎり多くのレコードが返されます。
次に示す例では、レコードをSalesRep属性でグルーピングし、結果レコード11-20を返します。
DEFINE Reps AS FROM ResellerState 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 FROM ResellerState 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 FROM ProductState 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) |