Usando agrupar por em várias colunas

1037

Eu entendo o objetivo de GROUP BY x

Mas como GROUP BY x, yfunciona e o que isso significa?

eu--''''''---------''''''''''''
fonte
2
Você não o encontrará descrito como esta pergunta o coloca. A cláusula GROUP BY pode usar um ou mais campos. GRUPO POR CLIENTE; GRUPO POR sobrenome, nome; Grupo por ano, loja, sku etc.
Bill

Respostas:

2029

Group By Xsignifica colocar todos aqueles com o mesmo valor para X no grupo .

Group By X, Ysignifica colocar todos aqueles com os mesmos valores para X e Y em um grupo .

Para ilustrar usando um exemplo, digamos que temos a tabela a seguir, relacionada a quem está cursando o assunto 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ê usa apenas uma group bycoluna no assunto; dizer:

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

Você receberá algo como:

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

... porque existem 5 entradas para ITB001 e 2 para MKB114

Se tivéssemos group byduas colunas:

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

nós conseguiríamos isso:

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

Isso ocorre porque, quando agrupamos por duas colunas, está dizendo "Agrupe-as para que todas as pessoas com o mesmo Assunto e Semestre estejam no mesmo grupo e 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 duas no semestre 2. As duas pessoas que fazem 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.

Smashery
fonte
11
@ Smashery: Então, isso também significa que GROUP BY A,Bé o mesmo que GROUP BY B,A?
tumchaaditya
23
Sim. Não posso dizer com certeza se são tão eficientes quanto os outros, mas eles darão o mesmo resultado, sim.
Smashery
2
Deve-se acrescentar aqui que existe uma diferença entre GROUP BY a, be GROUP BY a AND buma vez que o segundo lista apenas itens agrupados com exatamente o mesmo conteúdo e sem "subgrupos". Nesse caso, a saída seria a mesma que a primeira.
Dwza
5
Gostaria de acrescentar que a ordem na qual você agrupa pelas colunas não importa. No exemplo acima por grupo semestre, Assunto teria dado o mesmo resultado
user2441441
2
bem, grupo por a, b e agrupar por b, a não devolver o mesmo resultado - as linhas são exibidas em uma ordem diferente
fanny
33

A GROUP BYcláusula é usada 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:

1) SELECT (é usado para selecionar dados de um banco de dados)

2) FROM (a cláusula é usada para listar as tabelas)

3) WHERE (a cláusula é usada para filtrar registros)

4) GROUP BY (a cláusula pode ser usada em uma instrução SELECT para coletar dados em vários registros e agrupar os resultados por uma ou mais colunas)

5) HAVING (a cláusula é usada em combinação com a cláusula GROUP BY para restringir os grupos de linhas retornadas apenas àqueles cuja condição é VERDADEIRA)

6) ORDER BY (a palavra-chave é usada para classificar o conjunto de resultados)

Você pode usar tudo isso se estiver usando funções agregadas, e essa é a ordem em que elas devem ser definidas, caso contrário, você poderá 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

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

S. Mayol
fonte
1
mas onde é que vamos colocar as 2 colunas, como agregar baseado em 2 / mais colunas é a questão
Chaitanya Bapat
Olá Chaitanya, não sei se é isso que você está perguntando, mas deixe-me dar apenas alguns exemplos. Se você tiver uma tabela de produtos, use funções agregadas dessa maneira, abaixo estão dois cenários: SELECT AVG (instock) FROM produtos; Isso calculará as unidades médias em estoque da tabela de produtos. Agora você deseja calcular as unidades em estoque por categoria de produto, é necessário usar a função AVG com a cláusula GROUP BY da seguinte forma: SELECT categoryId, AVG (instock) FROM produtos GROUP BY categoryId;
S. Mayol
Isso nem mesmo remotamente responde à pergunta ... A questão aqui é como obter o "agrupamento encadeado" de "sujeito" e "semestre" ao mesmo tempo, conforme explicado no exemplo ...
MahNas92