gpt4 book ai didi

sql - 与 ROW_NUM 一起使用时,Oracle 查询行顺序不同

转载 作者:行者123 更新时间:2023-12-04 22:13:30 26 4
gpt4 key购买 nike

我在 ORACLE 中使用条件之间,以实现分页。我将按降序对 CNT 列上的数据进行排序,以首先显示计数最多的值。

我得到不同的行顺序,正常顺序和行号顺序。

下面是我的数据集:

PATTERN_TBL

PATTERN | CNT
1 | 3
Aaaa Aaa | 14
aaaaaa | 3

正常查询:
SELECT PATTERN, CNT FROM PATTERN_TBL ORDER BY CNT DESC

PATTERN | CNT
Aaaa Aaa | 14
aaaaaa | 3
1 | 3

查询之间:
SELECT ROW_N, PATTERN,CNT FROM (SELECT 
ROW_NUMBER() OVER ( ORDER BY CNT DESC) AS ROW_N,
PATTERN, CNT FROM PATTERN_TBL)
WHERE ROW_N BETWEEN 1 AND 100

PATTERN | CNT
Aaaa Aaa | 14
1 | 3
aaaaaa | 3

在上述两个输出中,第 3 行和第 2 行是互换的。我想修复订单。我怎样才能做到这一点?

最佳答案

您的问题是您有两行 cnt 的值相同.这带来了更大的稳定排序问题。

关系数据库中的排序不稳定(此 question 的答案对稳定排序给出了很好的描述)。也就是说,当order by键具有相同的值,它们可以以任何顺序出现。它们可以在不同的运行中以不同的顺序出现。

这其实是显而易见的。 SQL 表表示无序集。也就是说,没有自然排序,所以没有办法定义一个稳定的排序。

如果您想要排序的一致性,您需要确保键唯一地定义每一行。我通常有一个 id 列,可以将其添加为 order by 的最后一个键。 .

在您的情况下,您可以使用以下模式:order by cnt desc, pattern .

关于sql - 与 ROW_NUM 一起使用时,Oracle 查询行顺序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com