Risposte:
ORDER BY altera l'ordine in cui gli articoli vengono restituiti.
GROUP BY aggregherà i record in base alle colonne specificate che consente di eseguire funzioni di aggregazione su colonne non raggruppate (come SUM, COUNT, AVG, ecc.).
ORDER BY altera l'ordine in cui gli articoli vengono restituiti.
GROUP BY aggregherà i record in base alle colonne specificate che consente di eseguire funzioni di aggregazione su colonne non raggruppate (come SUM, COUNT, AVG, ecc.).
TABLE:
ID NAME
1 Peter
2 John
3 Greg
4 Peter
SELECT *
FROM TABLE
ORDER BY NAME
=
3 Greg
2 John
1 Peter
4 Peter
SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME
=
1 Greg
1 John
2 Peter
SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1
=
Peter
age
colonna, con Peters che ha età diverse e la query è SELEZIONA NOME, ETÀ DA TABELLA GRUPPO PER NOME?
ORDINA PER: ordina i dati in ordine crescente o decrescente.
Considera la tabella CLIENTI :
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
Di seguito è riportato un esempio, che ordinerebbe il risultato in ordine crescente per NOME:
SQL> SELECT * FROM CUSTOMERS
ORDER BY NAME;
Ciò produrrebbe il seguente risultato:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
+----+----------+-----+-----------+----------+
GROUP BY: organizza dati identici in gruppi.
Ora, la tabella CLIENTI ha i seguenti record con nomi duplicati:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Ramesh | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | kaushik | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
se si desidera raggruppare nomi identici in un unico nome, la query GROUP BY sarà la seguente:
SQL> SELECT * FROM CUSTOMERS
GROUP BY NAME;
Ciò produrrebbe il seguente risultato: (per nomi identici selezionerebbe l'ultimo e infine ordinerebbe la colonna in ordine crescente)
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 4 | kaushik | 25 | Mumbai | 6500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 2 | Ramesh | 25 | Delhi | 1500.00 |
+----+----------+-----+-----------+----------+
come hai dedotto che non è di alcuna utilità senza le funzioni SQL come sum, avg ecc ..
quindi segui questa definizione per capire l'uso corretto di GROUP BY:
Una clausola GROUP BY funziona sulle righe restituite da una query riassumendo righe identiche in un gruppo singolo / distinto e restituisce una singola riga con il riepilogo per ciascun gruppo, utilizzando la funzione Aggregate appropriata nell'elenco SELECT, come COUNT (), SUM (), MIN (), MAX (), AVG (), ecc.
Ora, se desideri conoscere l'importo totale dello stipendio su ciascun cliente (nome), la query GROUP BY sarà la seguente:
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
GROUP BY NAME;
Ciò produrrebbe il seguente risultato: (somma degli stipendi di nomi identici e ordina la colonna NOME dopo aver rimosso nomi identici)
+---------+-------------+
| NAME | SUM(SALARY) |
+---------+-------------+
| Hardik | 8500.00 |
| kaushik | 8500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 3500.00 |
+---------+-------------+
La differenza è esattamente ciò che suggerisce il nome: un gruppo per esegue un'operazione di raggruppamento e un ordine per ordinamenti.
Se lo fai SELECT * FROM Customers ORDER BY Name
, ottieni l'elenco dei risultati ordinato in base al nome del cliente.
Se SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive
ottieni un conteggio dei clienti attivi e inattivi. Il gruppo ha aggregato i risultati in base al campo specificato.
Hanno un significato completamente diverso e non sono affatto correlati.
ORDER BY consente di ordinare il set di risultati in base a criteri diversi, ad esempio prima l'ordinamento per nome da az, quindi l'ordinamento in base al prezzo dal più alto al più basso.
(ORDINA PER nome, prezzo DESC)
GROUP BY consente di prendere il set di risultati, raggrupparlo in gruppi logici e quindi eseguire query aggregate su quei gruppi. Ad esempio, puoi selezionare tutti i dipendenti, raggrupparli in base alla posizione di lavoro e calcolare lo stipendio medio di tutti i dipendenti di ciascuna sede di lavoro.
Semplice, ORDER BY
ordina i dati e GROUP BY
raggruppa o combina i dati.
ORDER BY
ordina il set di risultati come da campo citato, per impostazione predefinita in ordine crescente.
Supponiamo che tu stia attivando una query come ORDER BY (student_roll_number)
, ti mostrerà il risultato in ordine crescente dei numeri del rotolo dello studente. In questo caso, l' student_roll_number
immissione potrebbe verificarsi più di una volta.
Nel GROUP BY
caso, lo usiamo con le funzioni aggregate e raggruppa i dati secondo la funzione aggregata e otteniamo il risultato. Qui, se la nostra query ha SUM (marks)
insieme ad GROUP BY (student_first_name)
essa, mostrerà la somma dei voti degli studenti appartenenti a ciascun gruppo (dove tutti i membri di un gruppo avranno lo stesso nome).
GROUP BY viene utilizzato per raggruppare righe in una selezione, di solito durante l'aggregazione di righe (ad esempio, calcolo di totali, medie, ecc. Per un insieme di righe con gli stessi valori per alcuni campi).
ORDER BY viene utilizzato per ordinare le righe risultanti da un'istruzione select.
Alcuni buoni esempi lì. Mi piace aggiungere il mio dal webcheatsheet che fornisce buoni esempi chiari, oltre a consentirti di eseguire il tuo SQL.
ORDER BY
mostra un campo in ordine crescente o decrescente. Mentre GROUP BY
mostra gli stessi nomi di campo, ID ecc in un solo output.
Va notato che GROUP BY
non è sempre necessario in quanto (almeno in PostgreSQL e probabilmente in altre varianti SQL) puoi usare ORDER BY
con un elenco e puoi ancora usare ASC
o DESC
per colonna ...
SELECT name_first, name_last, dob
FROM those_guys
ORDER BY name_last ASC, name_first ASC, dob DESC;