select文で取得するデータを並び替える方法~order by~

MySQL

指定したカラムで取得したデータを並び替えるorder byの使い方についてご紹介していきます

部長
部長

商品価格を高い順から並び替えたいなあ

前提条件

商品を管理しているテーブルから指定したカラムを基準に並び替えをしていきます

使用するテーブル:productsテーブル

+----+-----------------+-------+
| id | name            | price |
+----+-----------------+-------+
|  1 | ドックフード001 |  1000 |
|  2 | ドックフード002 |  2000 |
|  3 | ドックフード003 |  1500 |
|  4 | ドックフード004 |  1800 |
|  5 | ドックフード005 |  2500 |
+----+-----------------+-------+
5 rows in set (0.016 sec)

条件

  • 商品価格のpriceカラムを利用します
  • priceカラムを基準に昇順、降順に並び替えします

取得したデータを並び替える

構文

select * from products order by 条件 asc(昇順)/desc(降順);

コードの見方

青文字・・・省略できない決まり文句
紫文字・・・コメント
白文字・・・利用者の任意で入力する文字列

asc/descは利用用途に応じてどちらかを指定します。

昇順で並び替え

昇順で並び替えをする方法です。『order by』と合わせて『asc』を使用します。

使用するSQL文

select * from products order by price asc;

商品価格で昇順に並び替える

ascは省略してもOK

出力結果

+----+-----------------+-------+
| id | name            | price |
+----+-----------------+-------+
|  1 | ドックフード001 |  1000 |
|  3 | ドックフード003 |  1500 |
|  4 | ドックフード004 |  1800 |
|  2 | ドックフード002 |  2000 |
|  5 | ドックフード005 |  2500 |
+----+-----------------+-------+
5 rows in set (0.001 sec)

金額の安い商品からデータを取得することができました。

Point!

order byのデフォルトは昇順となるので並び順を指定しない場合は自動的に『asc』と認識されます

何も指定しない場合は昇順と認識される

select * from products order by price;
降順で並び替え

昇順で並び替えをする方法です。『order by』と合わせて『desc』を使用します。

使用するSQL文

select * from products order by 条件 desc;

出力結果

+----+-----------------+-------+
| id | name            | price |
+----+-----------------+-------+
|  5 | ドックフード005 |  2500 |
|  2 | ドックフード002 |  2000 |
|  4 | ドックフード004 |  1800 |
|  3 | ドックフード003 |  1500 |
|  1 | ドックフード001 |  1000 |
+----+-----------------+-------+
5 rows in set (0.001 sec)

商品価格が高い順からデータを取得することができました

並び替え条件を複数設定する

複数の条件を指定して並び替えをする方法です

条件

  • priceカラムで降順(desc)に並び替える
  • 同じ金額のものはidで並び順を昇順(asc)に指定する

テーブルの状態

+----+-----------------+-------+
| id | name            | price |
+----+-----------------+-------+
|  1 | ドックフード001 |  1000 |
|  2 | ドックフード002 |  2000 |
|  3 | ドックフード003 |  1500 |
|  4 | ドックフード004 |  1800 |
|  5 | ドックフード005 |  2500 |
|  6 | ドックフード006 |  1500 |
+----+-----------------+-------+
6 rows in set (0.000 sec)

idの3と6が同じ金額となっているのでidを昇順で

select * from products order by  price desc,id asc;

複数指定する場合は間を(,)カンマで区切る

出力結果

+----+-----------------+-------+
| id | name            | price |
+----+-----------------+-------+
|  5 | ドックフード005 |  2500 |
|  2 | ドックフード002 |  2000 |
|  4 | ドックフード004 |  1800 |
|  3 | ドックフード003 |  1500 |
|  6 | ドックフード006 |  1500 |
|  1 | ドックフード001 |  1000 |
+----+-----------------+-------+
6 rows in set (0.001 sec)

priceカラムの金額が同じものはidで昇順になっていることがわかります

タイトルとURLをコピーしました