sql - 在 PostgreSQL 中对 NULL 值进行排序

标签 sql postgresql sorting null sql-order-by

<分区>

在 PostgreSQL 中,我在各种类型的列上使用 ORDER BY(NUMERICTEXTBOOLEAN, TEXT[]).我正在设计一个 AJAX GUI,用户可以在其中按各个列交互式地对记录进行排序(按升序和降序排列,在表格标题中使用熟悉的 ▲▼ 符号)。

问题是某些行包含 NULL 值。一般来说,只有少数这样的行 (100/10000),它们主要包含错误数据,我不愿意隐藏这些数据,但也不想显示太多。我想要的是 NULL 值在使用 ORDER BY 时始终落在列表的末尾(用户只会在她导航到分页的最后一页时看到它们) , 无论顺序是降序还是升序。

例如,对于数字属性,我发现 NULL 值似乎被认为是最大的,因此在降序排序时出现在列表的顶部。这正是我不想要的。

我带来了一个丑陋的 hack,我不好意思展示它,但会完成工作(在 python 中):

"COALESCE(value, '%sINFINITY')" % ('-' if sort_order == 'descending' else '')

如果它足够通用,我会在我的代码中保留这个丑陋的家伙。但显然不是。它适用于整数、 double 和时间戳,但不适用于文本、 bool 值等。仅仅是因为没有(至少我还没有找到)大于所有其他字符串的最大字符串常量,例如无穷大是所有数字中最大的。事实上,我可以将 'ZZZZZ' 放入代码中,但这显然非常不卫生,所以我决定在这里问 :)

有没有其他优雅的方式来做我想做的事?

最佳答案

使用:

select ...
from ...
order by the_column nulls last;

documentation .

关于sql - 在 PostgreSQL 中对 NULL 值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560207/

相关文章:

postgresql - Postgres 如何检查用户是否有 CREATEDB 权限?

php - 在 mysql 中排序 VS 已经排序的数组

mysql - SQL 查询从度量表中导出时钟数据

sql - 如何从访问日志中选择 DISTINCT(username) 和 MAX(timestamp) - postgresql

postgresql - 在 PostGIS 中创建一个空的分块栅格表

asp.net-mvc - MVC3 - 使用 Include 时对数据库查询进行排序

javascript - 通过在 javascript/jquery 中对 arraylist 进行排序来对 json 进行排序

sql - 在逆透视查询 SQLSERVER2008 中成为行值后更改列的名称

sql - 如何进行分组的多表SQL连接

MySQL从两列中选择日期范围数据