📜  如何在 SQL 中按升序排序时将空值过滤到最后?

📅  最后修改于: 2022-05-13 01:55:49.555000             🧑  作者: Mango

如何在 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);

输出: