函数row_number()
是否总是以相同的方式对相同的数据进行排序?
答案 0 :(得分:8)
没有。在SQL中排序是不稳定的,这意味着原始排序顺序不保留。无法保证分析函数或order by
将以相同的顺序返回相同键值的结果。
您始终可以添加唯一ID作为排序中的最后一个键,以使其可重现。
编辑:
注意:order by
的不可重现性是SQL标准的一部分。 Oracle文档没有另外指定。而且,一般来说,我在数据库中的排序通常不稳定(对于等效的键值)。我希望row_number()
的行为方式相同。
如果您需要特定顺序的内容,可以将rowid
添加到order by
子句中(请参阅here)。事实上,rowid
可以在没有row_number()
的情况下解决您的问题。