Tre*_*reg 4 sql sorting postgresql null sql-order-by
在 PostgreSQL 中,我使用ORDER BY各种类型的列(NUMERIC、TEXT、BOOLEAN、TEXT[])。我正在设计一个 AJAX GUI,用户可以在其中以交互方式按各个列对记录进行排序(按升序和降序排列,在表标题中使用熟悉的 \xe2\x96\xb2\xe2\x96\xbc 符号)。
问题是某些行包含NULL值。一般来说,这样的行很少(100/10000),并且它们大部分包含我不愿意隐藏的错误数据,但也不愿意显示太多。我想要的是NULL使用时值始终落在列表的末尾ORDER BY(用户只有在导航到分页的最后一页时才会看到它们),无论顺序是降序还是升序。
例如,对于数字属性,我发现NULL值似乎被认为是最大的,因此在降序排序时出现在列表的顶部。这正是我不想要的。
我带来了一个丑陋的黑客,我羞于展示它,但会完成工作(在 python 中):
\n\n"COALESCE(value, \'%sINFINITY\')" % (\'-\' if sort_order == \'descending\' else \'\')\nRun Code Online (Sandbox Code Playgroud)\n\n如果这个丑陋的家伙足够通用的话,我会把它保留在我的代码中。但显然不是。它适用于整数、双精度数和时间戳,但不适用于文本、布尔值等。仅仅是因为没有(至少我没有找到任何)最大字符串常量大于所有其他字符串,例如无穷大是所有数字中最大的。事实上,我可以输入\'ZZZZZ\'代码,但这显然非常不卫生,所以我决定在这里询问:)
还有其他优雅的方式来做我想做的事吗?
\n使用:
select ...
from ...
order by the_column nulls last;
Run Code Online (Sandbox Code Playgroud)
查看文档。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |