09 · 並べ替えと上位 N 件
シナリオ
更新金額基準で上位 10 件を降順に表示します。または複数キー並べ替え ― 地域(昇順) → 金額(降順)の順で並べ替えます。
@sort
{{ @sort [更新金額] desc }}
{{ [取引先] }} | {{ [更新金額] }}
方向は asc(デフォルト)または desc です。@sort は 安定ソート ― 並べ替えキーが等しい行は元の順序(最初に登場した順序)をそのまま維持します。
複数キー並べ替え
{{ @sort [地域] asc }}
{{ @sort [更新金額] desc }}
{{ [取引先] }} | {{ [地域] }} | {{ [更新金額] }}
最初の @sort が 第 1 キーで、それ以降の @sort ディレクティブは同点を分ける補助キーです(Excel/SQL の慣例)。上の例は地域アルファベット順にまとめ、その後各地域内で更新金額降順に並べ替えます。
@top
{{ @sort [更新金額] desc }}
{{ @top 10 }}
{{ [取引先] }} | {{ [更新金額] }}
@top N はすべてのフィルタと並べ替えが終わった後、最初の N 行だけを残します。@top は必ず @sort の後に置きます ― まず並べ替えて、その後で上位だけを取り出します。
N が利用可能な行数より大きいと @top は何もしません(全行を返します)。負数や 0 だと空ブロックになります。
@filter と組み合わせる
{{ @filter [更新金額] > 1000 }}
{{ @sort [更新金額] desc }}
{{ @top 5 }}
{{ [取引先] }} | {{ [更新金額] }}
順序は filter → sort → top です。@filter が複数あれば AND で結合されます(ADR-0029 関連 ― リストフィルタは Recipe 05 参照)。
比較意味論
@sort は XTL の標準比較ルールに従います。
- 数値または数値文字列: 数値比較。
- Boolean:
false < true。 - 日付: timestamp。
- それ以外: Unicode コードポイント順序の標準文字列形式。ロケール collation は適用されません。 ASCII では "Z" < "a" です(大文字 < 小文字)。
運用担当者がロケールベースの並べ替えを望むなら、ソース段階で事前に並べ替えるか、並べ替えキー列を追加してください。
メモ
- 安定ソートはキーが等しいとき入力順序を維持するということ ―
@sortディレクティブを複数使って同点を分ける補助キーとして活用するときに核心となります。 @sortの後に@topを使うのが正統な「上位 N」パターンです。@topだけ単独で使うと、ソースに書かれた順序のまま先頭 N 行を切り出します。- スペック参照:
spec/language.mdの「Sort」/「Top」、ADR-0016。