我在ORACLE中使用Between条件来实现分页.我将按降序对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的答案给出了稳定排序的良好描述).也就是说,当按键的顺序具有相同的值时,它们可以按任何顺序出现.它们可以在不同的运行中以不同的顺序出现.
这显然是显而易见的. SQL表表示无序集.也就是说,没有自然排序,因此无法定义稳定排序.
如果要在排序中保持一致性,则需要确保键唯一地定义每一行.我通常有一个id列,可以作为订单的最后一个键添加.
在您的情况下,您可以使用模式:按cnt desc,pattern命令.