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 |