SQLで日々データを抽出していると、結果を表示する際にあらかじめソートしておきたいという場面が出てきます。そんな時にORDER BYを用いると効率よくすっきりとデータを抽出することができます。今回はそんな並べ替えに便利なORDER BYの基本的な使い方と応用について見ていきます。
ORDER BY句とは?
SQLのORDER BYは、抽出するデータをソートする際に用いられます。ORDER BYに続けてカラム名を指定すると、そのカラムの値を軸にソートされます。標準のソート順は昇順(ASC)で、降順にする場合はDESCと末尾に記述します。
クエリの基本系は、
SELECT * FROM [テーブル] ORDER BY [ソートの軸となるカラム] ASC/DESC;
です。
ASCは昇順(小さいものから大きいものへ)、DESCは降順(大きいものから小さいものへ)を示します。
実際に使用する際には何かしらの関数と一緒に用いることが多いため、上記の形は最小限のシンプルな形です。あくまで基本形として押さえましょう。
ORDER BYの使い方は?
以下、サンプルテーブルを用いて例を見ていきます。ここでは、以下のサンプルテーブル「customer」を用います。まず、あなたがある企業やお店のために、集客目的の広告を運用する担当者になったと想定してください。
あなたは広告ad1,ad2,ad3を出して、集客を図っており、その結果6名の購入につながりました。そのレコードが「customer」テーブルに保存されています。
【サンプルテーブル】
「customer」テーブル
name | route | saved_date | price |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
山本 | ad3 | 2023-05-03 15:59:58 | 4200 |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
松田 | ad2 | 2023-05-24 19:49:28 | 2500 |
昇順に並び替える
customerテーブルを値段の安い順に並べ替えます。
【実行コード】
SELECT name, route, saved_date, price
FROM customer
ORDER BY price ASC;
【実行結果】
この結果、以下のようにpriceで昇順にソートされたデータが取得されます。
name | route | saved_date | price |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
松田 | ad2 | 2023-05-24 19:49:28 | 2500 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
山本 | ad3 | 2023-05-03 15:59:58 | 4200 |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
デフォルトではORDER BYは昇順でソートされます。降順でソートしたい場合はDESCを使用します。
降順に並び替える
続いて、customerテーブルを値段の高い順に並べ替えます。
【実行コード】
SELECT name, route, saved_date, price
FROM customer
ORDER BY price DESC;
【実行結果】
name | route | saved_date | price |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
山本 | ad3 | 2023-05-03 15:59:58 | 4200 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
松田 | ad2 | 2023-05-24 19:49:28 | 2500 |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
複数の要素でソートはできる?
ORDER BY句では、ソート条件をカンマで区切ることで、複数の要素をそれぞれ並び替えることができます。この機能は、主要なソート条件(第1ソート)で並べた後、同じ値を持つレコードに対してさらに別のカラム(第2ソート)でソートを行います。
では実際にデータを使って見ていきます。第1ソートにrouteの昇順、第2ソートにpriceの降順を適用すると、以下のようなクエリとなります。
【実行コード】
SELECT name, route, saved_date, price
FROM customer
ORDER BY route ASC, price DESC;
【実行結果】
name | route | saved_date | price |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
松田 | ad2 | 2023-05-24 19:49:28 | 2500 |
山本 | ad3 | 2023-05-03 15:59:58 | 4200 |
routeカラムの昇順でad1, ad2, ad3の順番で表示され(第1ソート)、同一のroute値を持つデータについては、priceの降順(第2ソート)が表示されています。
WHERE, GROUP BY, NULLデータと併用できる?
SQLでは、データの絞り込みや集計、さらにソートを組み合わせて実行することが可能です。以下では、ORDER BYとGROUP BY、WHERE、そしてNULLデータを考慮した活用法について解説します。
≫まずは簡単60秒で無料お問い合わせから≪
WHERE句を使った絞り込みとソート
WHERE句を使用してデータを絞り込み、その後でORDER BY句を用いてソートする例を考えてみましょう。
【実行コード】
SELECT name, route, saved_date, price
FROM customer
WHERE route = 'ad1'
ORDER BY price DESC;
上記のSQLクエリは、routeがad1のデータを抽出し、その結果をpriceの降順にソートします。
【実行結果】
name | route | saved_date | price |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
WHERE句の使い方や詳細については、以下の記事をご覧ください。
NULLデータについて
(注: 上記のテーブルデータにNULLが存在しないため、以下のデータを追加して説明します。)
山田 | ad3 | 2023-06-01 12:34:56 | NULL |
想定: priceカラムにNULLのデータが存在するとする。この場合、ORDER BY句でソートを行う際にNULLデータはどう扱われるかを見ていきます。通常、NULLは他のどの値よりも小さいとして扱われます。
【実行コード】
SELECT name, route, saved_date, price
FROM customer
ORDER BY price ASC;
【実行結果】
name | route | saved_date | price |
山田 | ad3 | 2023-06-01 12:34:56 | NULL |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
松田 | ad2 | 2023-05-24 19:49:28 | 2500 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
山本 | ad3 | 2023-05-03 15:59:58 | 4200 |
伊藤 | ad1 | 2023-05-13 09:11:47 | 5000 |
このように、priceがNULLのデータは昇順ソートでは最初に表示されます。SQLの多くの実装では、NULLは最小の値として扱われるためです。
GROUP BYとの組み合わせ
データの集計にGROUP BY句を使用し、その結果をORDER BY句でソートする方法を見てみましょう。
【実行コード】
SELECT route, AVG(price) as average_price
FROM customer
GROUP BY route
ORDER BY average_price DESC;
上記のSQLクエリは、routeごとの平均priceを計算し、その結果をaverage_priceの降順にソートします。
【実行コード】
route | average_price |
ad3 | 4200 |
ad2 | 3000 |
ad1 | 2800 |
この表には、各routeの平均priceが降順に表示されています。
このように、複数のSQL機能を組み合わせることで、より詳細にデータの取得や整理が行えます。
GROUP BYの使い方や詳細につきましては、以下の記事をご覧ください。
まとめ
今回紹介した、ORDER BYはSQLでデータを指定した順序で分かりやすく表示するための非常に便利な句です。
その他、SQLの様々な特徴や使用方法について例を交えて説明している記事もございますので、ぜひ参考にしてみてください。
SQLの勉強方法は?
SQLには、今回紹介したORDRE BY以外にも多くの構文があり、完全に習得し、自在にデータを扱えるようになるには多くの学習時間と実践の時間が必要になります。
特に、実践の時間については独学ではなかなか設けることができないものです。実践を交えてSQLを身につけたいと考えるのであれば、総合的な実践まで経験できるプログラミングスクールがおすすめです。
当サイトTECH MANIAでは、最短3か月で基礎から実践力・応用力まで身につけることのできるプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
独学でつまずいた方、一流のITエンジニアとしてスキルを高めていきたい方は必見です。
お問い合わせは以下のリンクからお進みください。
▼関連記事
- BETWEEN
- CASE
- COUNT
- DELETE
- DISTINCT
- EXISTS
- GROUP BY
- HAVING
- IN
- INSERT
- JOIN
- LIKE
- ORDER BY
- UPDATE
- UNION/UNION ALL
- WHERE
- 2023.09.06
- Programming
Author:鷺坂りな @TechMania編集部 投稿一覧
Programmingカテゴリの最新記事
-
- 2023.09.22
- programming,
【ESlint入門】Prettierとの併用でコード品質を向上させる
-
- 2023.09.08
【SQL入門】JOINでテーブル結合!種類と使い方を解説
-
- 2023.09.06
【SQL】ORDER BYのソートの基本、複数条件の並び替えについて解説
-
- 2023.08.08
- 開発,
ゲーム開発におすすめのプログラミング言語【10選】比較表
-
- 2023.05.19
【JSON入門】メリット、基本フォーマット、書き方を解説
-
- 2023.05.12
PHPフレームワークおすすめ9選|入門者向けに【徹底比較】