MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのIN()で指定した引数の順序に従って列を降順ソートする方法

MySQLでIN()句に渡した引数の順序を基準に、結果セットを降順で並べ替えたい場合には、FIELD()関数とDESCキーワードを組み合わせて使用します。FIELD()関数は、第1引数の値がリスト内のどの位置にあるかを返すため、その位置情報をもとに独自の並び順を実現できます。

それでは、実際の手順を見ていきましょう。まずはサンプル用のテーブルを作成します。

mysql> create table DemoTable
-> (
-> Number int
-> );
Query OK, 0 rows affected (0.57 sec)

レコードの挿入

続いて、INSERTコマンドを使用してテーブルにデータを登録します。

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.27 sec)

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.15 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

このクエリを実行すると、以下のような出力が得られます。

+--------+
| Number |
+--------+
| 10     |
| 20     |
| 30     |
| 40     |
| 50     |    
+--------+
5 rows in set (0.00 sec)

IN()の引数順に基づく降順ソートの実行

ここが本題です。MySQLのIN()に引数を指定したうえで、その順序に従って列を降順に並べ替えるには、以下のようにORDER BY句内でFIELD()関数を使用し、末尾にDESCを付与します。

mysql> select *from DemoTable where Number IN (40,50,20,30,10) ORDER BY FIELD(Number, 40,50,20,30,10) DESC;

出力結果

上記のクエリを実行すると、次のような結果が出力されます。

+--------+
| Number |
+--------+
| 10     |
| 30     |
| 20     |
| 50     |
| 40     |
+--------+
5 rows in set (0.03 sec)

仕組みの解説

FIELD(Number, 40,50,20,30,10)は、Numberの値が引数リスト「40, 50, 20, 30, 10」の中で何番目に位置するかを数値で返します。たとえば40なら1、10なら5です。通常はこの位置番号の昇順(ASC)で並べ替えるとIN()に書いた通りの順序になりますが、今回はDESCを指定しているため、リストの後ろ側にある値から順に表示されます。つまり出力結果は「10 → 30 → 20 → 50 → 40」という、引数リストの逆順になっているのです。

なお、IN()のリストに含まれていない値に対してはFIELD()関数が0を返す点にも注意してください。意図しない行が先頭や末尾に現れるのを防ぎたい場合は、WHERE句で対象を絞り込むか、CASE式を使った代替手法も検討するとよいでしょう。

  1. C#でリストの要素を降順に並べ替える方法

    C#では、LINQのorderby句とdescendingキーワードを組み合わせることで、リスト内の要素を簡単に降順(大きい順・逆アルファベット順)に並べ替えることができます。サンプルデータの準備まず、以下のようなEmployeeクラスのオブジェクトを格納したリストを用意します。IList<Employee> emp = new List<Employee>() { new Employee() { EmployeeRank = 4, EmpName = Amit, EmpMarks = 90 }, new Employee() { EmployeeRa

  2. 【Python】Name列を基準にDataFrameを降順に並べ替えるプログラムの作成方法

    はじめにpandasのDataFrameを特定の列(ここでは「Name」列)を基準に降順で並べ替える方法を解説します。データ分析では、名前のアルファベット順や数値の大小に応じてデータを整理したい場面がよくあります。そんなときに活躍するのが sort_values() メソッドです。入力データ以下のサンプルDataFrameを想定します。 Id Name 0 1 Adam 1 2 Michael 2 3 David 3 4 Jack 4 5 Peter出力結果Name列を基準に降順でソートすると、次のようになります。 Id