メインコンテンツへスキップ

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。