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

MySQLで降順(DESC)ソート時にNULL値を先頭に表示する方法

はじめに

MySQLで特定のフィールドを基準に降順(DESC)で並べ替えを行い、NULL値を先頭に表示したい場合があります。通常のORDER BY句では、MySQLはNULLを最小値として扱うため、降順ソートではNULLが最後に配置されます。しかし、GROUP BY句とIS NULL条件を組み合わせることで、NULL値を意図的に先頭に持ってくることが可能です。

基本構文

NULL値を先頭に表示しながら降順で並べ替えるには、以下の構文を使用します。

select yourColumnName from yourTableName group by yourColumnName is null desc,yourColumnName desc;

ポイントは「yourColumnName IS NULL」という式です。NULLの場合は1、それ以外は0と評価されるため、これを降順にソートすることで、NULL値のレコードが最初に来るようになります。

動作確認用テーブルの作成

実際に構文を試してみましょう。まず、サンプル用のテーブルを作成します。

mysql> create table OrderByNullFirstDemo
    -> (
    -> StudentId int
    -> );
Query OK, 0 rows affected (0.56 sec)

レコードの挿入

次に、INSERTコマンドを使って数件のデータを挿入します。NULL値を含むレコードも登録しておきます。

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

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

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

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

テーブル内容の確認

SELECT文ですべてのレコードを表示して、挿入結果を確認しましょう。

mysql> select *from OrderByNullFirstDemo;

実行結果は以下の通りです。

+-----------+
| StudentId |
+-----------+
|      100 |
|      200 |
|      150 |
|     NULL |
+-----------+
4 rows in set (0.00 sec)

NULL値を先頭にした降順ソートの実行

それでは、冒頭で紹介した構文を実行し、NULL値を先頭に表示したまま降順で並べ替えてみます。

mysql> select StudentId from OrderByNullFirstDemo group by StudentId is null desc,StudentId desc;

実行結果:

+-----------+
| StudentId |
+-----------+
|     NULL |
|       200 |
|       150 |
|       100 |
+-----------+
4 rows in set, 2 warnings (0.00 sec)

ご覧のとおり、NULL値が一番最初に表示され、その後に数値が降順(200→150→100)で並んでいます。

まとめ

  • GROUP BY カラム名 IS NULL DESC を使うことで、NULL値かどうかを判定したグループ分けができる。
  • NULLは1、非NULLは0として評価されるため、DESC指定によりNULL行が先頭に来る。
  • その後ろに同じカラムの DESC ソートを組み合わせることで、実データも降順に並ぶ。

なお、より一般的にはORDER BY句でも「ORDER BY yourColumnName IS NULL DESC, yourColumnName DESC」という書き方が使えます。用途に応じて使い分けるとよいでしょう。

  1. JavaScriptで配列の先頭のn個の要素を取得する方法|_.first()の使い方を解説

    JavaScriptで配列の先頭からn個の要素を取得したい場合、自前でロジックを書くこともできますが、JavaScriptライブラリであるunderscore.jsには、この用途に特化した便利な関数_.first()が用意されています。配列操作の際に広く使われる定番メソッドです。基本構文_.first(array, n);第1引数には対象となる配列、第2引数には取得したい要素数(n)を渡します。第2引数の数値を指定すると、配列の先頭からその個数分の要素が出力として返されます。なお、nを省略した場合は先頭の1要素のみが返ります。例1:引数に配列のみを渡した場合次の例では、引数として配列だけを渡し

  2. 【Android】リストの値をランダムな順序で表示する方法

    Androidでリストの値をランダムな順序で表示する方法この記事では、Androidアプリでリストの値をランダムな順序で表示する方法を実装例とともに解説します。名前を入力して「Save」ボタンを押すとデータが保存され、その内容がシャッフルされた状態でListViewに表示されるサンプルを作成します。ポイントとなるのは、Java標準ライブラリの Collections.shuffle() メソッドです。このメソッドを呼び出すだけで、リスト内の要素の順序を簡単にランダム化できます。手順1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。メニューから「Fil