百折不撓

データ系の新米エンジニアとして戦闘中。

SQLにて列内のソート順の変更(word: IN, FILED)

 ちょっと知れたので、メモ(postgreSQL)。
table name 'aiueo'
c0 | c1
_________
0 | hagehage
1 | higehige
2 | fugefuge
3 | hegehege
4 | hogehoge
みたいなテーブルがあった時に、c0の順番通りに表したいならば、

SELECT * 
FROM aiueo
ORDER BY c0 ASC

とかで良い(順番逆にするならASC->DESC)。
 順番を0,1,2,3,4じゃなくて、0,2,1,4,3とかしたい時は、

SELECT * 
FROM aiueo
WHERE c0 IN (0, 2, 1, 4, 3)
ORDER BY FIELD(c0, 0, 2, 1, 4, 3)

とすると、こちらで指定した0,2,1,4,3の順で返してくれる。WHERE文(句?)でIN句を書く必要があるのかはよく分からない。自分の環境だとWHERE文が無くても大丈夫だが、参考サイトの人たちは書いている。SQLの言語かバージョンの違いなのだろうか。今のところ私には分からない。

参考サイト:
日々の覚書: WHERE .. IN (..)のリストの順番でソートするORDER BY FIELDの仕組み
where句のINの並び順で結果をsortしたいときはORDER BY FIELDを使う - こんにちはこんにちはmonmonです!