2009-08-14 14 views

risposta

70

ORDER BY altera l'ordine in cui vengono restituiti gli elementi.

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

+84

Questa affermazione rende praticamente non ha senso senza un esempio di accompagnamento. – JohnMerlino

+2

penso che il secondo esempio nella pagina nel link è sufficiente per capire la differenza http://www.tutorialspoint.com/sql/sql-group-by.htm – nishantbhardwaj2002

+0

Si può fornire un esempio? – Rice

3

GROUP BY viene utilizzato per raggruppare le righe in una selezione, in genere quando si aggregano le righe (ad esempio, il calcolo dei totali, delle 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.

19

La differenza è esattamente ciò che il nome implica: un gruppo esegue un'operazione di raggruppamento e un ordine per tipo.

Se si esegue SELECT * FROM Customers ORDER BY Name, l'elenco dei risultati viene ordinato in base al nome del cliente.

Se si fa SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive si ottiene un conteggio di clienti attivi e inattivi. Il gruppo aggregando i risultati in base al campo specificato.

+2

Inoltre: se si GROUP, i risultati non sono necessariamente ordinati; sebbene in molti casi possano venire fuori in un ordine intuitivo, ciò non è garantito dalla clausola GROUP. Se desideri che i tuoi gruppi siano ordinati, utilizza sempre un ORDER BY esplicito dopo GROUP BY. –

202

ORDINA DA modifica l'ordine in cui vengono restituiti gli articoli.

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 
+2

Cosa succede se la tabella ha la colonna 'age', con Peters che ha età diverse e la query è SELECT NAME, AGE FROM TABLE GROUP BY NAME? – Varun

+1

Non è possibile restituire colonne che non fanno parte del gruppo o dispongono di un metodo. Quindi è necessario aggiungere l'età per raggruppare o fare qualcosa come Max (Age). – RiddlerDev

10

Hanno un significato completamente diverso e non sono affatto correlati.

ORDER BY consente di ordinare il set di risultati in base a diversi criteri, come ad esempio il primo ordinamento per nome da a-z, quindi ordinare in base al prezzo dal più alto al più basso.

(ORDER BY nome, prezzo DESC)

GROUP BY consente di prendere il vostro set di risultati, il gruppo in gruppi logici e quindi eseguire query di aggregazione su tali gruppi. Ad esempio, è possibile selezionare tutti i dipendenti, raggrupparli per posizione di lavoro e calcolare lo stipendio medio di tutti i dipendenti di ciascuna sede di lavoro.

3

Alcuni buoni esempi lì. Proprio come aggiungere il mio da webcheatsheet che fornisce buoni esempi chiari, oltre a permettervi di eseguire il vostro SQL.

SQL Order By

SQL Group By

7

Semplice, ORDER BY ordini i dati e GROUP BY gruppi o combina i dati.

ORDER BY ordina il risultato impostato secondo il campo indicato, per impostazione predefinita in ordine crescente.

Supponiamo che stiate sparando una domanda come ORDER BY (student_roll_number), mostrerà il risultato in ordine crescente di numeri di rotolo dello studente.Qui, la voce student_roll_number potrebbe verificarsi più di una volta.

Nel caso GROUP BY, utilizziamo questo con funzioni di aggregazione e raggruppa i dati secondo la funzione di aggregazione e otteniamo il risultato. Qui, se la nostra query ha SUM (marks) insieme a GROUP BY (student_first_name), mostrerà la somma dei voti degli studenti appartenenti a ciascun gruppo (in cui tutti i membri di un gruppo avranno lo stesso nome).

1

ORDER BY mostra un campo in ordine crescente o decrescente. Mentre GROUP BY mostra lo stesso nome di campo, l'ID etc in un solo output.

+4

Questa risposta non fornisce ulteriori informazioni sul fatto che la risposta accettata, o qualsiasi altra risposta data, non lo dichiari già. – newfurniturey

0

Va notato GROUP BY non è sempre necessario in quanto (almeno in PostgreSQL, e probabilmente in altre varianti di SQL) è possibile utilizzare ORDER BY con una lista e è ancora possibile utilizzare ASC o DESCper colonna .. .

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC; 
39

ORDER BY: ordinare i dati in ordine crescente o decrescente.

Considerate i CLIENTI tabella:

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

seguente è un esempio, che ordinare il risultato in ordine crescente da NAME:

SQL> SELECT * FROM CUSTOMERS 
    ORDER BY NAME; 

Questo 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: organizzare i dati identici in gruppi.

Ora, CLIENTI tabella 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 singolo nome, quindi query GROUP BY potrebbe essere il seguente:

SQL> SELECT * FROM CUSTOMERS 
    GROUP BY NAME; 

Ciò produrrebbe il seguente risultato: (per i nomi identici si sceglierebbe l'ultimo e infine ordinerà 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 avete dedotto che si tratta di alcuna utilità senza funzioni SQL come somma, media, ecc ..

in modo da passare attraverso questa definizione per comprendere il corretto uso di GROUP BY:

Una clausola GROUP BY funziona sulle righe restituite da una query riassumendo le 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, ad esempio COUNT (), SUM(), MIN(), MAX(), AVG(), ecc.

Ora, se si vuole conoscere l'importo totale dello stipendio per ogni cliente (nome), quindi query GROUP BY potrebbe essere il seguente:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS 
    GROUP BY NAME; 

Questo produrrebbe il seguente risultato: (somma degli stipendi dei nomi identici e ordinare la colonna nOME dopo aver rimosso i nomi identici)

+---------+-------------+ 
| NAME | SUM(SALARY) | 
+---------+-------------+ 
| Hardik |  8500.00 | 
| kaushik |  8500.00 | 
| Komal |  4500.00 | 
| Muffy | 10000.00 | 
| Ramesh |  3500.00 | 
+---------+-------------+ 
1
  1. GROUP bY aggregherà record dalla colonna specificata che consente per eseguire funzioni di aggregazione su colonne non raggruppate (come SUM, COUNT, AVG, ecc.). ORDINA BY modifica l'ordine in cui vengono restituiti gli articoli.
  2. Se si esegue SELECT IsActive, COUNT (*) DAI clienti GROUP BY IsActive si ottiene un conteggio di clienti attivi e inattivi. Il gruppo aggregando i risultati in base al campo specificato. Se lo fai SELEZIONA * DAI CLIENTI ORDINA PER Nome quindi ottieni l'elenco dei risultati ordinato in base al nome del cliente.
  3. Se si GROUP, i risultati non sono necessariamente ordinati; sebbene in molti casi possano venire fuori in un ordine intuitivo, ciò non è garantito dalla clausola GROUP. Se desideri che i tuoi gruppi siano ordinati, utilizza sempre un ORDER BY esplicitamente dopo GROUP BY.
  4. I dati raggruppati non possono essere filtrati dalla clausola WHERE. I dati dell'ordine possono essere filtrati dalla clausola WHERE.