PAGE句

PAGE句では、返すレコードのサブセットを指定します。

デフォルトでは、すべての結果レコードが返されます。しかし場合によっては、その結果のサブセットのみをリクエストするほうが便利です。このような場合は、PAGE (<offset>, <count>)句を使用して、返す結果レコードの数を指定します。

<offset>が使用可能なレコードの合計数より大きい場合、空の表が返されます。ただし、<offset> + <count>が使用可能なレコードの合計数より大きい場合、可能なかぎり多くのレコードが返されます。

次に示す例では、レコードをSalesRep属性でグルーピングし、結果レコード11-20を返します。

DEFINE Reps AS
FROM ResellerState
GROUP BY SalesRep
PAGE (10,10)

PAGEは中間結果に適用されます。FROMで指定された文でPAGE(0, 10)が指定されている場合は、ソース・レコードの数は10個が上限になります。

上位K件

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であるとします。

この表に、PERCENTを使用したPAGE句と使用しないPAGE句をリストします。
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)