如何在 SQL 中按升序排序时将空值过滤到最后?
在本文中,我们将看到在 SQL 中升序排序时如何使 null 排在最后。 SQL 将 NULL 值视为小于 0,因此在按升序排序时,NULL 值总是首先出现。
我们可以通过两种方法最终使 NULL 值。
方法 1:使用减号运算符
此方法仅适用于数字和日期值。列名前的减号 (-)运算符使值按相反顺序排序。减号运算符对 NULL 值没有影响。
句法:
SELECT column_name FROM table_name ORDER BY -column_name DESC;
在这里,如果我们添加 DESC 关键字,则所有值都按降序排序,最后保留 NULL 值,减号运算符不改变 NULL 值的位置,以相反的顺序(升序)对非值进行排序。
第 1 步:创建数据库
使用以下 SQL 语句创建名为 geeks 的数据库。
询问:
CREATE DATABASE geeks;
步骤 2:使用数据库
使用以下 SQL 语句将数据库上下文切换到 geeks。
询问:
USE geeks;
第 3 步:表定义
我们的极客数据库中有以下 demo_table。
询问:
CREATE TABLE demo_table(
Name VARCHAR(20),
Age int,
City VARCHAR(20));
第 4 步:向表中插入数据
INSERT INTO demo_table VALUES('Romy', 22,'Delhi'),
('Rinkle', NULL, 'Delhi'),
('Ayushi', 21, 'Patna'),
('Shalini', 23, 'Patna'),
('Akanksha', NULL, 'Delhi');
第五步:查看表的数据
使用以下命令查看 demo_table 的内容:
询问:
SELECT * FROM demo_table;
输出:
第 6 步:对 Age 列进行排序,使 NULL 值出现在最后
询问:
SELECT * FROM demo_table ORDER BY -AGE DESC;
输出:
方法二:使用 COALESCE()函数
COALESCE():此函数返回列表中的第一个非空值。
我们将使用 demo_table 进行演示。
句法:
SELECT * FROM table_name ORDER BY COALESCE(column_name, (select max(column_name) from table_name)+1);
在此查询中,COALESCE 使列的 NULL 值返回该列的(1+最大值),从而使其成为在升序排序时最后返回的最大值。
询问:
SELECT * FROM demo_table ORDER BY COALESCE(AGE, (select max(AGE) from demo_table)+1);
输出: