sql - 如果两个值相等,order by 子句如何工作?

标签 sql oracle10g sql-order-by

这是我的报纸 table 。

    National News   A   1
    Sports          D   1
    Editorials      A   12
    Business        E   1
    Weather         C   2
    Television      B   7
    Births          F   7
    Classified      F   8
    Modern Life     B   1
    Comics          C   4
    Movies          B   4
    Bridge          B   2
    Obituaries      F   6
    Doctor Is In    F   6

当我运行此查询时
select feature,section,page from NEWSPAPER
where section = 'F'
order by page;

它给出了这个输出
Doctor Is In    F   6
Obituaries      F   6
Births          F   7
Classified      F   8

但是在 Kevin Loney 的 Oracle 10g Complete Reference 中,输出是这样的
Obituaries      F   6
Doctor Is In    F   6
Births          F   7
Classified      F   8

请帮助我了解它是如何发生的?

最佳答案

如果您需要在 ORDER BY 中的两个值时发生可靠的、可重复的排序子句的第一列是相同的,您应该始终提供另一个辅助列来进行排序。虽然您可以假设它们会根据输入的顺序(据我所知几乎总是如此,但请注意 SQL 标准没有指定任何形式的默认排序)或索引对它们进行排序,但您永远不应该(除非它对于您正在使用的引擎是专门记录的——即使那样,我个人也永远不会依赖它)。
如果您想在每个页面中按功能按字母顺序排序,您的查询应该是:

SELECT feature,section,page FROM NEWSPAPER
WHERE section = 'F'
ORDER BY page, feature;

关于sql - 如果两个值相等,order by 子句如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14058045/

相关文章:

mysql - MySQL 中的最大值 (x,y)

database - Oracle ALL_UPDATABLE_COLUMNS 内容

sql - oracle中的dense_rank()解析函数

mysql - 联合查询中的排序错误

php - 在 PHP 中使用关联数组构造 UPDATE 语句

mysql - 如何在SQL中查询字典类型列值?

sql - 在主键字段中选择具有最大值的行的最快方法

stored-procedures - 创建一个过程来检索我的表上的所有索引并重建

mysql - 按匹配记录百分比对表进行排序

MySQL 基于值的排序列