Eu entendo o ponto de 'GRUPO POR x'.
Mas como funciona o 'GRUPO POR x, y', e o que significa?
Por 'Grupo Por X' significa apresentar todos aqueles com o mesmo valor para X no único grupo.
Por X, Y' significa **apresentar todos aqueles com os mesmos valores para X e Y no mesmo grupo***.
Para ilustrar usando um exemplo, digamos que temos a seguinte tabela, que tem a ver com quem está frequentando que disciplina em uma universidade:
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 você utiliza um group by
apenas na coluna de assunto; digamos:
select Subject, Count(*)
from Subject_Selection
group by Subject
Vais ter algo do género:
Subject Count
------------------------------
ITB001 5
MKB114 2
...porque há 5 entradas para ITB001, e 2 para MKB114
Se tivéssemos de "agrupar por" duas colunas:
select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester
nós receberíamos isto:
Subject Semester Count
------------------------------
ITB001 1 3
ITB001 2 2
MKB114 1 2
Isto porque, quando agrupamos por duas colunas, está dizendo "Agrupe-as para que todas aquelas com o mesmo Assunto e Semestre estejam no mesmo grupo, e depois calcule todas as funções agregadas (Contagem, Soma, Média, etc.) para cada um desses grupos ". Neste exemplo, isso é demonstrado pelo fato de que, quando os contamos, há três pessoas fazendo ITB001 no semestre 1, e **dois*** fazendo-o no semestre 2. As duas pessoas que fazem o MKB114 estão no semestre 1, portanto não há linha para o semestre 2 (nenhum dado se encaixa no grupo "MKB114, Semestre 2").
Espero que isso faça sentido.
A cláusula GROUP BY
é utilizada em conjunto com as funções agregadas para agrupar o conjunto de resultados por uma ou mais colunas, por exemplo:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
Lembre-se desta ordem:
SELECT (é usado para seleccionar dados de uma base de dados)
FROM (cláusula é usada para listar as tabelas)
ONDE (cláusula é usada para filtrar registros)
GROUP BY (cláusula que pode ser utilizada numa declaração SELECT para recolher dados em vários registos e agrupar os resultados por uma ou mais colunas)
HAVING (cláusula é usada em combinação com a cláusula GROUP BY para restringir os grupos de filas devolvidas a apenas aqueles cuja condição é VERDADEIRO)
ORDEM POR (a palavra-chave é usada para ordenar o conjunto de resultados)
Você pode usar todas elas se estiver usando funções agregadas, e esta é a ordem que elas devem ser definidas, caso contrário você pode obter um erro.
As funções agregadas são:
MIN retorna o menor valor em uma determinada coluna
SUM retorna a soma dos valores numéricos em uma determinada coluna
O AVG retorna o valor médio de uma determinada coluna
COUNT retorna o número total de valores em uma determinada coluna
COUNT(*) retorna o número de linhas em uma tabela