ORDER BY句は、結果レコードの順序を指定するときに使用します。
結果レコードをソートするには、属性名または任意式を指定します。
ORDER BY <Attr/Exp> [ASC/DESC] [,<AttrExp> [ASC/DESC]]*
Attr/Expは、属性名または任意式です。
必要に応じて、ソート順を昇順にするか(ASC)、降順にするか(DESC)を指定できます。任意の値の組合せとソート順序を使用できます。方向を指定しない場合は、ASCであると見なされます。
ORDER BY句が使用されているときは、ソート後の属性のNULL値の順序は常にNULL以外の値の後になり、NaN(not-a-number)値の順序は常に、NaNでもNULLでもない値の後になります。これは、ソートの方向とは無関係です。同順位である範囲(または、ORDER BY句が省略された場合のすべてのレコード)の順序は不定ですが、変動することはありません。同じ問合せから返される結果の順序は、その問合せの対象データのバージョンが同じであれば、常に同じです。データの更新では、レコードが順番に追加または削除されますが、変更されていないレコードの順序が変化することはありません。
RETURN Reps AS SELECT SUM(Amount) AS Total GROUP BY SalesRep ORDER BY Total DESC
文字列値は、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 */
EQLでは、文の結果は問合せごとに変化しないことが保証されます。つまり、次のようになります。
たとえば、ORDER BY句がない文に対して、PAGE(0, 10)を使用する問合せを実行し、PAGE(10, 10)を使用してからPAGE(20, 10)を使用した場合に、更新が何もなければ、同じ結果(不定であるが変動はしない)から、10レコードのグループが順番に返されます。
ORDER BYは、RETURN句の結果またはPAGE句の処理にのみ影響することに注意してください。PAGE句を指定していないDEFINEでORDER BYを使用しても、何の影響もありません。