複数の列で並べ替える
第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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ORDER BYで並べ替える
- 複数の列で並べ替える
- LIMITとOFFSET
- 上位・下位N件を取得する