ORDER BY句は、結果レコードの順序を指定するときに使用します。
結果レコードをソートするには、属性名または任意式を指定します。
ORDER BY <Attr|Exp> [ASC|DESC] [,<Attr|Exp> [ASC|DESC]]*
ここで、Attr|Expは、属性名または任意式です。属性は、単一割当て属性または複数割当て属性です。
必要に応じて、ソート順を昇順にするか(ASC)、降順にするか(DESC)を指定できます。任意の値の組合せとソート順序を使用できます。方向を指定しない場合は、ASCであると見なされます。
RETURN Results AS SELECT SUM(Price) AS Total GROUP BY WineType ORDER BY Total DESC
Total WineType --------------------------- | 142.34 | Red | | 97.97 | White | | 52.90 | Chardonnay | | 46.98 | Brut | | 25.99 | Merlot | | 21.99 | Bordeaux | | 16.99 | Blanc de Noirs | | 14.99 | Pinor Noir | | | Zinfandel | ---------------------------
ZinfandelバケットはPriceがNULL値であるため、末尾にソートされます。ソート順序がASCの場合も、結果ではZinfandelは末尾です。
文字列値は、Unicodeコード・ポイント順にソートされます。
データ型がgeocodeの場合は、緯度順にソートされ、次に経度順にソートされます。geocodeデータを使用するときに、より意味のあるソート順を確立するには、ある地点からの距離を計算してから、その距離の順にソートします。
/* Invalid statement */ DEFINE T1 AS SELECT ... AS foo RETURN T2 AS SELECT ... AS bar FROM T1 ORDER BY T1.foo /* not allowed */ /* Valid statement */ DEFINE T1 AS SELECT ... AS foo RETURN T2 AS SELECT ... AS bar FROM T1 ORDER BY T1[].foo /* allowed */
RETURN T AS SELECT ... AS bar FROM T1 ORDER BY SUM(bar) /* not allowed because of SUM aggregation function */ RETURN T AS SELECT ... AS bar FROM T1 ORDER BY ABS(bar) /* allowed */
前述したように、セット(複数割当て属性)によるソートを行う際には、任意ではあるが固定の順序が使用されます。
RETURN Results AS SELECT SET(Price) AS PriceSet GROUP BY WineType ORDER BY PriceSet DESC
PriceSet WineType ---------------------------------------------------------------------- | { 14.99 } | Pinot Noir | | { 12.99, 13.95, 17.5, 18.99, 19.99, 21.99, 9.99 } | Red | | { 25.99} | Merlot | | { 22.99, 23.99 } | Brut | | { 21.99 } | Bordeaux | | { 20.99, 32.99, 43.99 } | White | | { 16.99 } | Blanc de Noirs | | { 17.95, 34.95 } | Chardonnay | | | Zinfandel | ----------------------------------------------------------------------
この降順では、ZinfandelバケットはPriceが割り当てられていないため、末尾にソートされます(この場合、空のセットが返されます)。
EQLでは、文の結果は問合せごとに変化しないことが保証されます。つまり、次のようになります。
たとえば、ORDER BY句がない文に対して、PAGE(0, 10)を使用する問合せを実行し、PAGE(10, 10)を使用してからPAGE(20, 10)を使用した場合に、更新が何もなければ、同じ結果(不定であるが変動はしない)から、10レコードのグループが順番に返されます。
ORDER BYは、RETURN句の結果またはPAGE句の処理にのみ影響することに注意してください。PAGE句を指定していないDEFINEでORDER BYを使用しても、何の影響もありません。