我在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;
答案 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
我不建议这样做,因为它不清楚它引用的是什么列,如果列顺序改变,查询将返回不同的结果。
更多资源: