【问题标题】:MySQL ORDER BY two clausesMySQL ORDER BY 两个子句
【发布时间】:2012-03-21 14:23:59
【问题描述】:

我正在学习 MySQL 语句 ORDER BY。我遇到了本教程,他们在其中展示了一个带有两个子句的示例。这怎么可能?例如:

SELECT * FROM table_name ORDER BY 
score DESC, date ASC;

这怎么可能必须通过两个子句来排序?这对我来说没有意义。您的结果如何被订购两次?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    此查询将执行以下操作:

       ORDER score descending
       IF there are two rows with same score
       ORDER date ascending
    

    简单地说,如果你有这张桌子

    score    date
    1        11111
    1        11113
    2        11112
    

    这会给你结果

    score    date 
    2        11112
    1        11111
    1        11113
    

    【讨论】:

    • 为什么日期 11113 的分数 ID 会发生变化?此外,11113 不是日期。
    • 是的,但它不准确,因为来自列分数和列日期的数据不再匹配
    【解决方案2】:

    首先它按分数排序,然后对于任何具有相同分数的行,它按日期排序。

    例如,这是按Score ASC, Date ASC排序的:

    Score Date
    
    1   2012/3/2
    12  2012/3/1
    46  2012/3/1
    213 2012/3/1
    213 2012/3/2
    234 2012/3/1
    234 2012/3/2
    435 2012/3/1
    435 2012/3/2
    435 2012/3/2
    

    【讨论】:

      【解决方案3】:
      SELECT...
      FROM..
      ORDER BY 
      score DESC, date ASC;
      

      表示它将首先按SCORE降序)然后按date升序

      如果你有这样的记录:

      A      B
      ==========
      10     100
      10     200
      20     300
      40     500
      

      ORDER BY A DESC, B ASC

      A     B
      ==========
      40    500
      20    300
      10    100 
      10    200
      

      如您所见,10B 有 2 条记录将按 ascending 排序,这就是为什么您会得到 100 then 200 而不是 200 then 100

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 2012-08-08
        • 2019-04-23
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多