Подтвердить что ты не робот

Что это за порядок на 1?

У меня возник вопрос в 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;
4b9b3361

Ответ 1

order by 1 означает "порядок по первому выбранному мной полю" - то есть, в этом случае, то же самое, что и order by playerno, потому что playerno было первым полем в списке.

Если вам нужна официальная формулировка, вот что говорит стандарт SQL-92 1:

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, кажется, применяется.


1. Эта цитата взята из свободно доступного проекта, а не из утвержденного стандарта.Хотя я уверен, что есть хотя бы несколько изменений между этим проектом и окончательным текстом стандарта (не говоря уже о том, чтобы между одной версией стандарта и другой), кажется маловероятным, что что-то такое фундаментальное изменится (вероятно, когда-либо).

Ответ 2

Это называется "ORDER BY ordinal", в основном упорядочивается столбцом в этой позиции. Заказ на 1 означает порядок по первому выбранному столбцу. В вашем примере это будет эквивалент выражения ORDER BY playerno

Я бы не рекомендовал делать это таким образом, хотя, поскольку он не понял, в каком столбце он ссылается, и если порядок столбца изменит запрос, будут возвращены разные результаты.

Дополнительные ресурсы:

Быстрый совет: заказ по 1 штуке

Плохие привычки пинать: ORDER BY по порядку

SQL: порядок по