2012-07-05 30 views
12

Tenía una pregunta en MySQL, lo hice correctamente. Pero el código del libro difiere un poco.¿qué es esta orden por 1?

libro:

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; 

¿Qué es este fin por 1?

Mi código también funciona y es casi el mismo, excepto:

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

StackOverflow - ¿por qué u no es fácil de formatear ??? :( – Master

+2

Es fácil formatear el código, siempre y cuando lea la ayuda de formateo :) – Ryan

+0

Simplemente agregue 4 espacios al comienzo de la línea para hacer un bloque de código. Pero asegúrese de tener una línea en blanco antes de la primera. Puede ver más en el ícono de ayuda del editor. – rcdmk

Respuesta

23

order by 1 medios "pedido por el primer campo que he seleccionado" - es decir, en este caso, lo mismo que order by playerno, porque era el playerno primer campo en la lista.

Editar: Hacer un rápido vistazo a un proyecto de la SQL-92 standard confirma:

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>. 

En este caso, b es el que parece que se aplica. Aunque estoy seguro de que hay al menos algunos cambios entre este borrador y el texto final del estándar (sin mencionar entre una versión del estándar y otro), parece improbable que algo tan fundamental cambie (probablemente nunca).

+0

gracias! lo tengo ! agradable y claro! – Master

+0

En lugar de un estándar de cumplimiento, hagamos una copia de seguridad con los documentos de MySQL: https://dev.mysql.com/doc/refman/5.7/en/select.html keyword: 'orden por 2' – Sinkeat

5

Esto se conoce como "ORDER BY ordinal", básicamente ordena por columna en esa posición. Ordenar por 1 significa ordenar por la primera columna seleccionada. En su ejemplo, sería el equivalente a decir ORDER BY playerno

No recomendaría hacerlo de esta manera, aunque no está claro a qué columna hace referencia y si el orden de las columnas cambia la consulta arrojará resultados diferentes.

Más recursos:

Quick Tip: Order By 1 Desc

Bad habits to kick : ORDER BY ordinal

SQL: order by

+0

..... ................. exactamente! – Master