Utilizzo di group by su più colonne


1037

Capisco il punto di GROUP BY x

Ma come GROUP BY x, yfunziona e cosa significa?


2
Non lo troverai descritto come pone questa domanda. La clausola GROUP BY può accettare uno o più campi. GRUPPO PER cliente; GROUP BY cognome, nome; GRUPPO PER anno, negozio, sku ecc.
Bill

Risposte:


2029

Group By Xsignifica mettere tutti quelli con lo stesso valore per X in un gruppo .

Group By X, Ysignifica mettere tutti quelli con gli stessi valori sia per X che per Y in un gruppo .

Per illustrare usando un esempio, supponiamo di avere la seguente tabella, che riguarda chi frequenta la materia in un'università:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Quando si utilizza a group bysolo nella colonna soggetto; dire:

select Subject, Count(*)
from Subject_Selection
group by Subject

Otterrai qualcosa di simile a:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... perché ci sono 5 voci per ITB001 e 2 per MKB114

Se fossimo su group bydue colonne:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

otterremmo questo:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Questo perché, quando raggruppiamo per due colonne, sta dicendo "Raggruppali in modo che tutti quelli con lo stesso Soggetto e Semestre siano nello stesso gruppo e quindi calcolino tutte le funzioni aggregate (Conteggio, Somma, Media, ecc. ) per ciascuno di tali gruppi " . In questo esempio, questo è dimostrato dal fatto che, quando li contiamo, ci sono tre persone che fanno ITB001 nel semestre 1 e due che lo fanno nel semestre 2. Entrambe le persone che fanno MKB114 sono nel semestre 1, quindi non c'è riga per il secondo semestre (nessun dato rientra nel gruppo "MKB114, semestre 2")

Spero che abbia senso.


11
@Smashery: Quindi significa anche che GROUP BY A,Bè lo stesso GROUP BY B,A?
tumchaaditya,

23
Sì, lo fa. Non posso dire con certezza se sono efficienti tra loro, ma daranno lo stesso risultato, sì.
Smashery,

2
È possibile aggiungere qui che esiste una differenza tra GROUP BY a, be GROUP BY a AND bpoiché la seconda elenca solo gli elementi raggruppati con esattamente lo stesso contenuto e senza "sottogruppi". In questo caso l'output sarebbe uguale al primo.
Dwza,

5
Vorrei aggiungere che l'ordine in cui si raggruppa per colonne non ha importanza. Nel suddetto gruppo di esempio per semestre, Soggetto avrebbe dato lo stesso risultato
user2441441

2
beh, raggruppa per a, b e raggruppa per b, a NON restituisce lo stesso risultato - le righe sono visualizzate in un ordine diverso
fanny

33

La GROUP BYclausola viene utilizzata insieme alle funzioni di aggregazione per raggruppare il set di risultati per una o più colonne. per esempio:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Ricorda questo ordine:

1) SELEZIONA (viene utilizzato per selezionare i dati da un database)

2) FROM (la clausola viene utilizzata per elencare le tabelle)

3) DOVE (la clausola viene utilizzata per filtrare i record)

4) GROUP BY (la clausola può essere utilizzata in un'istruzione SELECT per raccogliere dati su più record e raggruppare i risultati per una o più colonne)

5) HAVING (la clausola viene utilizzata in combinazione con la clausola GROUP BY per limitare i gruppi di righe restituite solo a quelli la cui condizione è TRUE)

6) ORDER BY (la parola chiave viene utilizzata per ordinare il set di risultati)

È possibile utilizzare tutte queste funzioni se si utilizzano funzioni di aggregazione e questo è l'ordine in cui devono essere impostate, altrimenti è possibile ottenere un errore.

Le funzioni aggregate sono:

MIN restituisce il valore più piccolo in una determinata colonna

SOMMA restituisce la somma dei valori numerici in una determinata colonna

AVG restituisce il valore medio di una determinata colonna

COUNT restituisce il numero totale di valori in una determinata colonna

COUNT (*) restituisce il numero di righe in una tabella


1
ma dove mettere le 2 colonne, come aggregare in base a 2 / più colonne è la domanda
Chaitanya Bapat,

Ciao Chaitanya, non so se questo è quello che mi stai chiedendo, ma lascia che ti dia solo alcuni esempi. Se si dispone di una tabella di prodotti, utilizzare le funzioni di aggregazione in questo modo, di seguito sono riportati due scenari: SELEZIONA AVG (instock) DA prodotti; Questo calcolerà le unità medie disponibili nella tabella dei prodotti. Ora si desidera calcolare le unità disponibili per categoria di prodotto, è necessario utilizzare la funzione AVG con la clausola GROUP BY in questo modo: SELEZIONARE categoriaId, AVG (instock) DA prodotti GRUPPO PER categoriaId;
S. Mayol,

Questo non risponde nemmeno in remoto alla domanda ... La domanda qui è come ottenere "raggruppamento incatenato" di "soggetto" e "semestre" allo stesso tempo, come spiegato nell'esempio dato ...
MahNas92
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.