SQL で特殊な並び順に対応できる FIELD 関数

投稿者: | 2019年8月28日

MySQLなどで、データを価格順や年齢順に並べるのはもちろん簡単にできるのですが、次のような students というテーブルがあった際に class カラムを基準にして 松組 > 竹組 > 梅組 の順で並べるにはどうしたらよいでしょうか。

以前は case 文を使ったりしててしんどい思いをしてたのですが、最近、FIELD という関数を知りました。

https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_field

この関数は下記のような使い方をします。

FIELD(str, str1, str2, str3・・・)

これは str と同じ内容のものが str1~strX のうち、何番目に存在するかを返してくれます。

SELECt FIELD('竹組', '松組', '竹組', '梅組')

このような場合、「竹組」は2番目に存在しますので、「2」が返されます。

というわけでこの FIELD を利用して、 松組 > 竹組 > 梅組の順で並べるには次のような SQL を実行します。

SELECT * FROM `students` ORDER BY FIELD(class, '松組', '竹組', '梅組');

結果は以下の通りです。