SQL GROUP BY and HAVING Clause with Examples
What is the SQL Group by Clause?
o grupo por cláusula é um comando SQL que é usado para agrupar linhas que têm os mesmos valores. O grupo por cláusula é usado na instrução SELECT. Opcionalmente é usado em conjunto com funções agregadas para produzir relatórios de resumo a partir do banco de dados.
é o que ele faz, resumindo dados da base de dados.
As consultas que contêm o grupo por cláusula são chamadas de consultas agrupadas e retornam apenas uma linha para cada item agrupado.,
SQL GROUP BY Syntax
Now that we know what the SQL GROUP BY clause is, let’s look at the syntax for a basic group by query.
SELECT statements... GROUP BY column_name1 ;
AQUI
- “instruções SELECT…”é a consulta padrão SQL SELECT command.
- “grupo por column_name1” é a cláusula que realiza o agrupamento com base em column_name1.
- “” é opcional; representa outros nomes de colunas quando o agrupamento é feito em mais de uma coluna.
- “” é opcional; é usado para restringir as linhas afetadas pelo grupo por cláusula., É semelhante à cláusula onde.
agrupar usando uma única coluna
a fim de ajudar a compreender o efeito do grupo SQL por cláusula, vamos executar uma consulta simples que devolve todas as entradas de género a partir da tabela de membros.
SELECT `gender` FROM `members` ;
gender Female
Female
Male
Female
Male
Male
Male
Male
Male
suponha que queremos obter os valores únicos para os géneros. Nós podemos usar uma consulta seguinte –
SELECT `gender` FROM `members` GROUP BY `gender`;
executando o script acima em MySQL workbench contra o Myflixdb nos dá os seguintes resultados.,
gender Female
Male
nota apenas dois resultados foram retornados. Isto porque só temos dois tipos de sexo masculino e feminino. O grupo por cláusula no SQL agrupou todos os membros “masculinos” e devolveu apenas uma única linha para ele. Fez o mesmo com os membros” femininos”.
agrupar usando múltiplas colunas
suponha que queremos obter uma lista de category_id filme e anos correspondentes em que eles foram lançados.,
Vamos observar a saída deste simples consulta
SELECT `category_id`,`year_released` FROM `movies` ;
category_id year_released 1 2011 2 2008 NULL 2008 NULL 2010 8 2007 6 2007 6 2007 8 2005 NULL 2012 7 1920 8 NULL 8 1920
O resultado acima tem muitos duplicados.
let’s execute the same query using group by in SQL –
executando o script acima em MySQL workbench contra o myflixdb dá-nos os seguintes resultados mostrados abaixo.
category_id year_released NULL 2008 NULL 2010 NULL 2012 1 2011 2 2008 6 2007 7 1920 8 1920 8 2005 8 2007
The GROUP BY clause operates on both the category id and year released to identify unique rows in our above example.,
Se a categoria id é a mesma, mas o ano lançado é diferente, então uma linha é tratada como uma única .Se o ID da categoria e o ano liberado for o mesmo para mais de uma linha, então é considerado um duplicado e apenas uma linha é mostrada.
agrupar e agregar funções
suponha que queremos o número total de homens e mulheres em nossa base de dados. Podemos usar o seguinte script mostrado abaixo para fazer isso.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Executar o script acima no MySQL workbench contra o myflixdb nos dá os seguintes resultados.,
gender COUNT('membership_number') Female 3 Male 5
os resultados mostrados abaixo são agrupados por cada valor de gênero único postado e o número de linhas agrupadas é contado usando a função de contagem agregada.
Restricting query results using the HAVING clause
It’s not always that we will want to perform groups on all the data in a given table. Haverá alturas em que queremos limitar os nossos resultados a determinados critérios. Em tais casos, podemos usar a cláusula de ter
suponha que queremos saber todos os anos de lançamento para a categoria de filme id 8., Usaríamos o seguinte script para alcançar nossos resultados.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
executando o programa acima em MySQL workbench contra o Myflixdb dá-nos os seguintes resultados mostrados abaixo.
movie_id title director year_released category_id 9 Honey mooners John Schultz 2005 8 5 Daddy's Little Girls NULL 2007 8
Nota Apenas os filmes de categoria id 8 foram afectados pelo nosso grupo por cláusula.
resumo
- O grupo por cláusula SQL é utilizado para agrupar linhas com os mesmos valores.
- O grupo por cláusula é usado juntamente com a instrução SQL SELECT.,
- A instrução de seleção usada no grupo por cláusula só pode ser usada contém nomes de colunas, funções agregadas, constantes e expressões.
- SQL tendo cláusula é usado para restringir os resultados retornados pelo grupo por cláusula.
- MYSQL GROUP BY Clause is used to collect data from multiple records and returned record set by one or more columns.