SQL プログラミング

【ORDER BYの基本】取得したデータを並び替えてみよう

スポンサーリンク

SQLec05

頼れる人
テーブルからデータを取得した結果は、レコードが登録された順番に取得されるので、ほしい順番に並んでいるとは限らないよ
だからデータを並び替える方法を教えるよ

ここだけ読めば、取得したデータをほしい順番で並び替える方法がわかるようになるよ
ぴよちゃん

もうすでにORDER BY句を使った並び替えの方法は知ってるよ!という人は、ここは読まなくていいです
こけさん

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

項目名を指定して並び替える

SELECT文では、データが登録されている順番に取得されることとなります。
データの登録は値の順番にきれいに並んでいるわけではないので、常にほしい順番に結果が得られるわけではありません。

ORDER BY句で指定した項目の順番に並び替えた結果で取得することができます。
指定する項目は1つでも複数でも指定できます。

// 金額・注文日・名前で並び替え
SELECT orderdate
      ,name
      ,amount
FROM orders
ORDER BY amount, orderdate, name;

// 2021-01-10,ブラウス,8000
// 2021-01-10,スカート,10000
// 2021-01-11,スカート,10000
// 2021-01-10,ブラウス,10000
// 2021-01-11,ジャケット,11000

項目の表示位置を指定して並び替える

ORDER BY句では、項目名を指定する代わりに、SELECT句で書いた項目の位置を指定することでも可能となります。

// 金額・注文日・名前で並び替え
SELECT orderdate
      ,name
      ,amount
FROM orders
ORDER BY 3, 1, 2;        // 3番目はamount, 1番目はorderdate, 2番目はname

// 2021-01-10,ブラウス,8000
// 2021-01-10,スカート,10000
// 2021-01-11,スカート,10000
// 2021-01-10,ブラウス,10000
// 2021-01-11,ジャケット,11000

表示位置を指定して並び替えたとき気を付けないといけないことは、SELECT句の項目を追加したり削除したときに合わせてORDER BYの値も変更しないと取得する順番が変わってしまいます。
このように、2番目と3番目の間に項目を追加したとき、ORDER BY句がそのままだと表示する順番が変わってしまします。

// 金額・注文日・名前で並び替えのあと
// 名前と金額の間に数量を追加したケース
SELECT orderdate
      ,name
      ,qty
      ,amount
FROM orders
ORDER BY 3, 1, 2;        // 3番目はqty, 1番目はorderdate, 2番目はname

// 2021-01-10,ブラウス,1,8000
// 2021-01-10,ブラウス,1,10000
// 2021-01-11,スカート,1,10000
// 2021-01-10,スカート,2,10000
// 2021-01-11,ジャケット,3,11000

並び替える順番(昇順・降順)を指定するには

表示する順序を昇順(ascending order)で並び替えるときは項目のあとにASCを指定します。
降順(descending order)で並び替えるときは項目のあとにDESCを指定します。
項目名を指定したときでも、表示位置を指定したときでも、同じように指定します。
また、ASCもDESCも指定しなかったときには、暗黙でASCが指定されたことと同じ動作をします。

数値項目や日付項目のとき、昇順を指定すると値が小さい順番に、降順を指定すると値が多い順番に並び替えることができます。
文字列項目のとき、昇順を指定すると文字コードの小さい順番に、降順を指定すると文字コードの大きい順番に並び替えることができます。
※数字やアルファベット(全角・半角ともに)は値の順番に文字コードが定義されています。漢字などの全角文字や記号は規定の順番に文字コードが定義されています。

数字やアルファベット(全角・半角ともに)は値の順番に文字コードが定義されています。漢字などの全角文字や記号は規定の順番に文字コードが定義されています。

// 注文日を降順・金額を昇順で並び替え
SELECT orderdate
      ,name
      ,amount
FROM orders
ORDER BY orderdate DESC, amount ASC;

// 2021-01-11,スカート,10000
// 2021-01-11,ジャケット,11000
// 2021-01-10,ブラウス,8000
// 2021-01-10,スカート,10000
// 2021-01-10,ブラウス,10000

ORDER BYで指定した順序が同じレコードが複数あったときには、レコードが登録された順番となります。

関数を使ったときには

関数を使った結果で並び順を指定したいときには、ORDER BY句には関数も含めて指定します。
関数内の項目だけでは並び替えをすることはできません。

// 注文日ごとの金額合計を降順で並び替え
SELECT orderdate
      ,sum(amount)
FROM orders
GROUP BY orderdate
ORDER BY sum(amount) DESC;

// 2021-01-10,28000
// 2021-01-11,21000

このようなときには、集計関数を使ったカラムには別名をつけて、その別名を使って並び順を指定します。
または項目の表示位置を指定して並び替えてもOKです。

// 注文日ごとの金額合計を降順で並び替え
SELECT orderdate
      ,sum(amount)  amt
FROM orders
GROUP BY orderdate
ORDER BY amt DESC;

// 2021-01-10,28000
// 2021-01-11,21000

まとめ

取得したデータを並び替えるには、ORDER BYを使います。
昇順に並び替えるときには項目のあとにASCを、降順に並び替えるときには項目のあとにDESCを付けます。

項目名を指定しても、項目の表示位置を指定してもできます。

▶ 一覧に戻る

スポンサーリンク

-SQL, プログラミング

PAGE TOP

© 2021 ちょこぱいぶろぐ Powered by AFFINGER5