2012-07-05 11 views
12

Ho avuto una domanda in MySQL, l'ho fatto correttamente. Ma il codice del libro differisce un po '.cos'è questo ordine per 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; 

Cos'è questo ordine da 1?

Il mio codice funziona anche ed è quasi lo stesso, tranne:

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

StackOverflow - perché u non facile da formattare ??? :( – Master

+2

È facile formattare il codice, purché si legga la guida di formattazione :) – Ryan

+0

Basta aggiungere 4 spazi all'inizio della riga per creare un blocco di codice. Ma assicurati di avere una riga vuota prima del primo. Puoi vedere di più sull'icona di aiuto dell'editor. – rcdmk

risposta

23

order by 1 significa "ordine da parte del primo campo ho selezionato" - vale a dire, in questo caso, lo stesso di order by playerno, perché era il playerno primo campo nell'elenco.

Edit: Facendo un rapido sguardo a una bozza del SQL-92 standard conferma:

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

In questo caso, b è quella che sembra applicarsi. Mentre sono sicuro che ci siano almeno alcuni cambiamenti tra questa bozza e il testo finale dello standard (per non parlare tra una versione dello standard e un'altra) sembra improbabile che qualcosa di così fondamentale cambierebbe (probabilmente mai).

+0

grazie! fatto ! bello e chiaro! – Master

+0

Più che uno standard di conformità, eseguiamo il backup con i documenti propri di MySQL: https://dev.mysql.com/doc/refman/5.7/en/select.html parola chiave: "ordina per 2" – Sinkeat

5

Questo è noto come "Ordinare per ordinale", in pratica è ordinato dalla colonna in quella posizione. Ordina per 1 significa ordine dalla prima colonna selezionata. Nel tuo esempio, equivarrebbe a dire ORDER BY playerno

Non consiglierei di farlo in questo modo anche se non è chiaro quale colonna stia facendo riferimento e se l'ordine delle colonne cambia la query restituirà risultati diversi.

Altre risorse:

Quick Tip: Order By 1 Desc

Bad habits to kick : ORDER BY ordinal

SQL: order by

+0

..... .................Esattamente ! – Master