0Pricing
SQL Academy · レッスン

複数の列で並べ替える

第2ソートキーで同順位を解消します。

「複数の列で並べ替える」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

同順位の問題

1つの列を基準に並べ替えると、同じ値を持つ行どうしの順序は定義されません。価格が20の商品が3つある場合、どの順序でも返される可能性があります。

順序を完全に予測可能にするには、2つ目の並べ替えキーを追加します。

-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;

複数の並べ替えキーを指定する

ORDER BYには、カンマ区切りで複数の列を指定できます。データベースは最初の列で並べ替え、同順位があれば2番目の列で解消し、その後も同様に処理します。

ここでは商品を価格順に並べ、同じ価格の商品は名前のアルファベット順に並べています。

SELECT name, price
FROM products
ORDER BY price, name;

キーの順序が重要

列の順序によって結果が変わります。ORDER BY price, nameとORDER BY name, priceは同じではありません。

最初のキーが主たる並べ替え基準で、後のキーは前のキーが同じ場合にのみ使われます。

-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;

列ごとの方向

各並べ替えキーには、それぞれ異なる方向を指定できます。ASCとDESCは自由に組み合わせられます。

これはカテゴリをアルファベット順にまとめ、各カテゴリ内では価格の高い商品から表示します。

SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;

DESCは列ごとに適用される

よくある間違いは、末尾のDESCですべての順序が逆になると考えることです。DESCの直前にある列にだけ適用されます。

ORDER BY category, price DESCでは、categoryは昇順のままで、priceだけが降順になります。

-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;

3つ以上のキー

必要な数だけ並べ替えキーを連結できます。各キーは、それより前のすべてのキーが同じ場合にのみ使われます。

注文を日付、顧客、そして同じ顧客・日付内での合計の順に並べ替えます。

SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;

安定した決定的な並べ替え

完全に決定的な結果を得るには、主キーなどの一意な列を並べ替えキーの最後に指定します。これにより、2つの行が同順位になることはありません。

これは、次のレッスンで学ぶページネーションに重要です。

SELECT id, name, price
FROM products
ORDER BY price DESC, id;

式と列を組み合わせる

並べ替えキーには、通常の列と式を組み合わせて指定できます。各キーは独立しています。

これは在庫額の降順で並べ替え、同順位の場合は名前のアルファベット順に並べます。

SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;

ブール値でグループを移動する

便利な方法として、ブール式で並べ替えて、特定のグループを先頭または末尾に移動できます。PostgreSQLでは、falseはtrueより前に並びます。

これは在庫のある商品(stock > 0)を先に表示し、各グループ内では安い順に並べます。

SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;

NULLの位置を制御する

PostgreSQLではデフォルトで、昇順の場合はNULLが最後、降順の場合は最初に並びます。任意のキーにNULLS FIRSTまたはNULLS LASTを指定して変更できます。

SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;

組み合わせる

現実的な複数キーの並べ替えでは、方向、式、NULLの扱いを組み合わせることがあります。左から右に読み、それぞれのキーが直前のキーで決まった順序をさらに細かくします。

SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
         rating DESC NULLS LAST,
         price ASC;

確認問題

ORDER BY category, price DESCについて考えてみましょう。

まとめ

複数列による並べ替えの要点です。

  • 並べ替えキーをカンマ区切りで指定し、前のキーを優先します
  • 各キーに個別のASC/DESCを指定できます
  • 決定的な順序にするには、一意な列を最後に指定します
  • 欠損値の位置はNULLS FIRST/NULLS LASTで制御します

次は、LIMITとOFFSETを使って返す行数を制限します。

SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;

よくある質問

「複数の列で並べ替える」レッスンは無料ですか?

はい。「複数の列で並べ替える」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「複数の列で並べ替える」で何を学びますか?

第2ソートキーで同順位を解消します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「複数の列で並べ替える」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ORDER BYで並べ替える
  2. 複数の列で並べ替える
  3. LIMITとOFFSET
  4. 上位・下位N件を取得する
← SQL Academyに戻る