2010-02-04 13 views
20

Sono (completamente) l'apprendimento di SQL al momento e ho trovato la clausola GROUP BY.Qualsiasi motivo per la clausola GROUP BY senza funzione di aggregazione?

GROUP BY aggrega o raggruppa il gruppo di risultati in base all'argomento (i) che gli viene assegnato. Se si utilizza questa clausola in una query, è possibile eseguire le funzioni di aggregazione sul set di risultati per trovare informazioni statistiche sul set di risultati come il calcolo delle medie (AVG()) o la frequenza (COUNT()).

La mia domanda è: l'istruzione GROUP BY è in qualche modo utile senza una funzione di aggregazione di accompagnamento?

Aggiornamento Utilizzando GROUP BY come sinonimo di DISTINCT è (probabilmente) una cattiva idea, perché ho il sospetto è più lento.

risposta

13

è l'istruzione GROUP BY in qualche modo utile senza una funzione di aggregazione di accompagnamento?

Utilizzando DISTINCT sarebbe un sinonimo in una situazione del genere, ma la ragione che ci si vuole/deve definire una clausola di GROUP BY sarebbe al fine di essere in grado di definire i dettagli HAVING clausola.

Se è necessario definire una clausola HAVING, è avete per definire un GROUP BY - non si può fare in combinazione con DISTINCT.

+1

Quindi la tua risposta è "no", giusto? –

+0

@Niels: dipende dai dati e dal modello dati, ma IME non ho mai avuto la necessità di poter ricordare –

6

è possibile eseguire un DISTINCT selezionare utilizzando un gruppo BY senza AGGREGATI.

-2

Viene utilizzato per più funzioni di aggregazione.

Ad esempio, si consideri il seguente codice:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name 

Ciò restituirà solo 1 risultato per prodotto, ma con l'ultimo valore aggiornato di quei record.

+3

'MAX()' è una funzione di aggregazione. –

+0

@am: Neils sta chiedendo informazioni sugli usi senza funzione di aggregazione –

+0

Non aggrega, seleziona un singolo valore da un elenco. _Un aggregato è una raccolta di elementi che vengono raccolti insieme per formare una quantità totale_ – Amirshk

6

Gruppo dal can utilizzato in bidirezionale Majorly
1) in insieme con funzioni di aggregazione SQL
2) per eliminare righe duplicate da un set di risultati

SO rispondere alle tue bugie domanda nella seconda parte degli USE sopra descritti.

1

Nota: tutto ciò che segue si applica solo alle MySQL

GROUP BY è guaranteed per restituire i risultati in ordine, DISTINCT non è.

GROUP BY insieme a ORDER BY NULL è della stessa efficienza di DISTINCT (e implementato nel modo di dire).Se è presente un indice sul campo che viene aggregato (o distinto), entrambe le clausole utilizzano la scansione dell'indice in questo campo.

In GROUP BY, è possibile restituire espressioni non raggruppate e non aggregate. MySQL sceglierà qualsiasi valore casuale dal gruppo corrispondente per calcolare l'espressione.

Con GROUP BY, è possibile omettere le espressioni GROUP BY dalla clausola SELECT. Con DISTINCT, non è possibile. Ogni riga restituita da un DISTINCT è garantita per essere unica.

Problemi correlati