在 PostgreSQL 中对 NULL 值进行排序

Tre*_*reg 4 sql sorting postgresql null sql-order-by

在 PostgreSQL 中,我使用ORDER BY各种类型的列(NUMERICTEXTBOOLEANTEXT[])。我正在设计一个 AJAX GUI,用户可以在其中以交互方式按各个列对记录进行排序(按升序和降序排列,在表标题中使用熟悉的 \xe2\x96\xb2\xe2\x96\xbc 符号)。

\n\n

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

\n\n

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

\n\n

我带来了一个丑陋的黑客,我羞于展示它,但会完成工作(在 python 中):

\n\n
"COALESCE(value, \'%sINFINITY\')" % (\'-\' if sort_order == \'descending\' else \'\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n

kli*_*lin 9

使用:

select ...
from ...
order by the_column nulls last;
Run Code Online (Sandbox Code Playgroud)

查看文档

  • 呃..你说的文档?已经听说过;)真为我感到羞耻,非常感谢! (3认同)