1这个订单是1?

时间:2012-07-05 23:01:41

标签: mysql sql-order-by

我在MySQL中有一个问题,做得对。但是书籍代码略有不同。

图书:

use tennis;
select playerno, datediff(coalesce(end_date, current_date), 
begin_date) as Difference, position
from committee_members
where datediff(coalesce(end_date, current_date), begin_date) > 500
order by 1;

这个订单是1?

我的代码也有效,除了以下几乎相同:

select playerno, datediff(coalesce(end_date, current_date) AS Data,
order by Data;

2 个答案:

答案 0 :(得分:26)

order by 1表示“按我选择的第一个字段排序” - 即,在这种情况下,与order by playerno相同,因为playerno是列表中的第一个字段。< / p>

编辑:快速查看SQL-92 standard的草稿确认了这一点:

10)If ORDER BY is specified, then each <sort specification> in the
        <order by clause> shall identify a column of T.

        Case:

        a) If a <sort specification> contains a <column name>, then T
          shall contain exactly one column with that <column name> and
          the <sort specification> identifies that column.

        b) If a <sort specification> contains an <unsigned integer>,
          then the <unsigned integer> shall be greater than 0 and not
          greater than the degree of T. The <sort specification> iden-
          tifies the column of T with the ordinal position specified by
          the <unsigned integer>.

在这种情况下,b似乎适用。虽然我确信这个草案与标准的最终文本之间至少有一些变化(更不用说标准的一个版本和另一个版本之间),但这个基础的东西似乎不太可能发生变化(可能永远)。 / p>

答案 1 :(得分:5)

这被称为“ORDER BY序数”,基本上按该位置的列顺序排列。按1排序表示第一个选定列的顺序。在您的示例中,它等同于说ORDER BY playerno

我不建议这样做,因为它不清楚它引用的是什么列,如果列顺序改变,查询将返回不同的结果。

更多资源:

Quick Tip: Order By 1 Desc

Bad habits to kick : ORDER BY ordinal

SQL: order by