Ricerca…


Usa ORDER BY con TOP per restituire le prime x righe in base al valore di una colonna

In questo esempio, possiamo utilizzare GROUP BY non solo determinato il tipo di righe restituite, ma anche quali righe vengono restituite, poiché stiamo usando TOP per limitare il set di risultati.

Diciamo che vogliamo restituire i primi 5 utenti con la reputazione più alta da un sito di domande e risposte popolare senza nome.

Senza ORDINA DI

Questa query restituisce le 5 righe principali ordinate per impostazione predefinita, che in questo caso è "Id", la prima colonna della tabella (anche se non è una colonna mostrata nei risultati).

SELECT TOP 5 DisplayName, Reputation
FROM Users

ritorna...

Nome da visualizzare Reputazione
Comunità 1
Geoff Dalgas 12567
Jarrod Dixon 11739
Jeff Atwood 37628
Joel Spolsky 25784

Con ORDINA DI

SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc

ritorna...

Nome da visualizzare Reputazione
JonSkeet 865.023
Darin Dimitrov 661.741
BalusC 650.237
Hans Passant 625.870
Marc Gravell 601.636

Osservazioni

Alcune versioni di SQL (come MySQL) utilizzano una clausola LIMIT alla fine di una SELECT , invece di TOP all'inizio, ad esempio:

SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5

Ordinamento per più colonne

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Nome da visualizzare Data di iscrizione Reputazione
Comunità 2008-09-15 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37628
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Ordinamento per numero di colonna (anziché nome)

Puoi usare il numero di una colonna (dove la colonna più a sinistra è "1") per indicare su quale colonna basare l'ordinamento, invece di descrivere la colonna con il suo nome.

Pro: Se pensi che sia probabile che tu possa cambiare i nomi delle colonne in un secondo momento, così facendo non infrangerà questo codice.

Con: Questo in genere ridurrà la leggibilità della query (è immediatamente chiaro che cosa significa 'ORDER BY Reputation', mentre 'ORDER BY 14' richiede qualche conteggio, probabilmente con un dito sullo schermo.)

Questa query ordina il risultato in base alla posizione relativa della colonna 3 dell'istruzione select anziché al nome della colonna Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Nome da visualizzare Data di iscrizione Reputazione
Comunità 2008-09-15 1
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567
Joel Spolsky 2008-09-16 25784
Jeff Atwood 2008-09-16 37628

Ordine di Alias

A causa dell'ordine di elaborazione delle query logiche, l'alias può essere utilizzato in ordine da.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep

E può usare l'ordine relativo delle colonne nell'istruzione select. Considera lo stesso esempio come sopra e invece di usare l'alias usa l'ordine relativo come per il nome visualizzato è 1, per Jd è 2 e così via

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3

Ordinamento personalizzato

Per ordinare questa tabella Employee per dipartimento, si utilizzerà ORDER BY Department . Tuttavia, se si desidera un diverso ordinamento che non è alfabetico, è necessario mappare i valori del Department in diversi valori che ordinano correttamente; questo può essere fatto con un'espressione CASE:

Nome Dipartimento
Hasan IT
Yusuf HR
Hillary HR
Joe IT
allegro HR
comprensione Contabile
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
Nome Dipartimento
Yusuf HR
Hillary HR
allegro HR
comprensione Contabile
Hasan IT
Joe IT


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow