MySQL Orderby a number, Nulls last の徹底解説
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