SQLのORDER BYの動作
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を指定すると降順で、指定しないと昇順で並び替えます。
以上です。