製造系SEのメモ

普段気になった内容をメモしていきます

SQLのORDER BYの動作

f:id:asakat:20190208225720p:plain

SQLを数年ぶりに触っていると「ORDER BY」の動作を忘れていたのでメモします。

テストデータ

以前使ったデータを少しいじって、10行×3列のデータを作りました。

gender blood type age
male B 26
female A 43
male B 23
female A 48
male AB 37
male A 39
male O 38
male B 33
female A 42
male AB 33

これをORDER BYで並び替えます。

genderで並び替え

まずはgenderのみで並び替えます。

SELECT * FROM "testdata" ORDER BY "gender" ASC

「ASC」でgenderを昇順に並び替えています。実行後のテーブルは以下の通りです。

gender blood type age
female A 43
female A 48
female A 42
male B 26
male B 23
male AB 37
male A 39
male O 38
male B 33
male AB 33

元の表の2行目が1行目に、4行目が2行目に、9行目が3行目に上がっています。

genderとblood typeで並び替え

次はgenderとblood typeで並び替えます。

SELECT * FROM "testdata" ORDER BY "gender" ASC, "blood type" DESC

「ASC」でgenderを昇順に、「DESC」でblood typeを降順に並び替えています。実行後のテーブルは以下の通りです。

gender blood type age
female A 43
female A 48
female A 42
male O 38
male B 26
male B 23
male B 33
male AB 37
male AB 33
male A 39

genderのみで並び替えた時と比べて、female部分はblood typeがAしか無いため並び替えられていませんが、male部分がblood typeで降順に並び替えられています。

gender、blood type、ageで並び替え

最後にgender、blood type、ageで並び替えます。

SELECT * FROM "testdata" ORDER BY "gender" ASC, "blood type" DESC, "age"

ageは順番を指定せずに並び替えます。実行後のテーブルは以下の通りです。

gender blood type age
female A 42
female A 43
female A 48
male O 38
male B 23
male B 26
male B 33
male AB 33
male AB 37
male A 39

同じgender、blood type内でageが昇順に並べ替えられています。

まとめ

  • ORDER BYでテーブルを並び替えます。
  • ORDER BYで複数の項目を指定すると指定した順に並び替えが実行されます。
  • ASCを指定すると昇順で、DESCを指定すると降順で、指定しないと昇順で並び替えます。


以上です。