MySQL Orderby a number, Nulls last の徹底解説

2024-04-02

MySQLで数値を昇順に並べ替え、NULL値を最後に表示する方法

標準の動作

SELECT * FROM table_name
ORDER BY number_column;

-- 結果

1
2
3
NULL

NULL値を最後に表示するには、以下のいずれかの方法を使用できます。

ISNULL()関数を使用して、NULL値かどうかをチェックし、CASE式を使用して、NULL値の場合は大きい値を設定します。

SELECT * FROM table_name
ORDER BY CASE WHEN ISNULL(number_column) THEN 99999 ELSE number_column END;

-- 結果

1
2
3
NULL

COALESCE()関数を使用して、NULL値を別の値に置き換えます。

SELECT * FROM table_name
ORDER BY COALESCE(number_column, 99999);

-- 結果

1
2
3
NULL
SELECT * FROM table_name
ORDER BY IFNULL(number_column, 99999);

-- 結果

1
2
3
NULL

ORDER BY句にDESCキーワードを使用すると、降順に並べ替えることができます。この場合、NULL値は最後に表示されます。

SELECT * FROM table_name
ORDER BY number_column DESC;

-- 結果

NULL
3
2
1

上記のいずれかの方法を使用して、MySQLで数値列を昇順に並べ替え、NULL値を最後に表示することができます。




-- テーブル employees

CREATE TABLE employees (
  id INT,
  name VARCHAR(255),
  salary INT
);

-- データ挿入

INSERT INTO employees (id, name, salary) VALUES
  (1, 'John Doe', 100000),
  (2, 'Jane Doe', 200000),
  (3, 'Peter Smith', NULL);

-- NULL値を最後に表示

SELECT * FROM employees
ORDER BY COALESCE(salary, 99999);

-- 結果

id | name       | salary
------- | -------- | --------
1  | John Doe  | 100000
2  | Jane Doe  | 200000
3  | Peter Smith | NULL

このコードでは、COALESCE()関数を使用して、salary列のNULL値を99999に置き換えています。

上記以外にも、ISNULL()関数とCASE式、IFNULL()関数、ORDER BY句にDESCキーワードを使用するなど、様々な方法でNULL値を最後に表示することができます。

詳細は、上記の解説を参照してください。




SELECT * FROM employees
ORDER BY CASE WHEN ISNULL(salary) THEN 99999 ELSE salary END;
SELECT * FROM employees
ORDER BY IFNULL(salary, 99999);
SELECT * FROM employees
ORDER BY salary DESC;

これらの方法は、それぞれ異なる方法でNULL値を最後に表示します。


mysql sql-order-by


GROUP BY句でレコード数をグループ化して取得

SQLのGROUP BY句は、レコードを列の値に基づいてグループ化し、集計情報を取得するために使用されます。この機能とCOUNT集計関数を組み合わせることで、各グループにおけるレコード数を効率的に取得することができます。基本的な構文解説SELECT: 取得したい列を指定します。ここでは、グループ化対象の列(列名)と、レコード数を示す列名(件数)を指定します。...


DECIMAL、NUMERIC、MONEY型?それぞれのメリットとデメリットを比較解説

DECIMAL型長所: 固定小数点精度で、小数点以下最大10桁まで正確に格納できます。 金融計算において最も精度が高く、誤差が発生しません。 多くのデータベースシステムで標準的にサポートされています。固定小数点精度で、小数点以下最大10桁まで正確に格納できます。...


MySQL root アクセス、そのままにして大丈夫? データ漏洩を防ぐための対策とは

MySQL root ユーザーは、データベースサーバーへの強力な管理権限を持つ重要なアカウントです。しかし、root ユーザー権限の悪用は、データ漏洩やシステム乗っ取りなど深刻なセキュリティリスクをもたらします。そこで、本記事では、MySQL root アクセス制限の重要性を解説し、安全な設定方法を詳しく説明します。...


MySQL、PDO、MariaDBで発生する「Uncaught exception 'PDOException' with message 'SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value'」の原因と解決策

このエラーは、MySQL、MariaDB などのデータベースに日時形式の値を挿入または更新しようとした際に発生します。データベースが期待する形式と異なる形式の値が渡された場合、このエラーが発生します。エラーの原因このエラーの原因はいくつか考えられます。...


セキュリティとスケーラビリティの両立:共有サーバー上でSaaSアプリケーションを安全に構築する方法

共有サーバーは、複数のユーザーが低コストで利用できるため、SaaS アプリケーションのホスティングに広く利用されています。しかし、共有サーバーでは、以下の課題が発生します。リソース制限: 共有サーバーは、CPU、メモリ、ストレージなどのリソースを他のユーザーと共有するため、個々のアプリケーションに割り当てられるリソースが制限されます。...


SQL SQL SQL SQL Amazon で見る



ORDER BY NULLS LASTオプションでNULL値を昇順ソート時に最後に表示する

ISNULL 関数は、値が NULL かどうかを確認し、NULL の場合は指定された値を返します。この関数を使用して、NULL 値を "Z" などの文字列に変換し、ソート時に最後に表示されるようにすることができます。CASE 式を使用して、NULL 値かどうかによって異なる値を返すことができます。この方法では、NULL 値を最大値として扱い、ソート時に最後に表示されるようにすることができます。