<分区>
在 PostgreSQL 中,我在各种类型的列上使用 ORDER BY
(NUMERIC
、TEXT
、BOOLEAN
, TEXT[]
).我正在设计一个 AJAX GUI,用户可以在其中按各个列交互式地对记录进行排序(按升序和降序排列,在表格标题中使用熟悉的 ▲▼ 符号)。
问题是某些行包含 NULL
值。一般来说,只有少数这样的行 (100/10000),它们主要包含错误数据,我不愿意隐藏这些数据,但也不想显示太多。我想要的是 NULL
值在使用 ORDER BY
时始终落在列表的末尾(用户只会在她导航到分页的最后一页时看到它们) , 无论顺序是降序还是升序。
例如,对于数字属性,我发现 NULL
值似乎被认为是最大的,因此在降序排序时出现在列表的顶部。这正是我不想要的。
我带来了一个丑陋的 hack,我不好意思展示它,但会完成工作(在 python 中):
"COALESCE(value, '%sINFINITY')" % ('-' if sort_order == 'descending' else '')
如果它足够通用,我会在我的代码中保留这个丑陋的家伙。但显然不是。它适用于整数、 double 和时间戳,但不适用于文本、 bool 值等。仅仅是因为没有(至少我还没有找到)大于所有其他字符串的最大字符串常量,例如无穷大是所有数字中最大的。事实上,我可以将 'ZZZZZ'
放入代码中,但这显然非常不卫生,所以我决定在这里问 :)
有没有其他优雅的方式来做我想做的事?