{"id":11408,"date":"2023-10-21T12:59:15","date_gmt":"2023-10-21T15:59:15","guid":{"rendered":"https:\/\/www.homehost.com.br\/blog\/?p=11408"},"modified":"2023-11-24T13:02:27","modified_gmt":"2023-11-24T16:02:27","slug":"group-by-sql","status":"publish","type":"post","link":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/","title":{"rendered":"GROUP BY SQL: como agrupar e analisar dados no SQL"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL-1024x686.png\" alt=\"GROUP BY SQL\" class=\"wp-image-11439\" width=\"1024\" height=\"686\" srcset=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL-1024x686.png 1024w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL-300x201.png 300w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL-768x515.png 768w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png 1073w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>O GROUP BY SQL \u00e9 uma t\u00e9cnica essencial no SQL que permite <strong>agrupar e analisar dados de maneira eficiente<\/strong>. A principal motiva\u00e7\u00e3o por tr\u00e1s do GROUP SQL \u00e9 simplificar a an\u00e1lise de grandes conjuntos de dados, permitindo que os usu\u00e1rios extraiam informa\u00e7\u00f5es significativas e criem relat\u00f3rios com base em crit\u00e9rios espec\u00edficos. Dessa forma, <strong>utilizamos o GROUP BY para agrupar registros com informa\u00e7\u00f5es semelhantes<\/strong>.  Combinando com outros comandos como SELECT, WHERE, <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/order-by-sql\/\">ORDER BY<\/a>, entre outros, para especificarmos os crit\u00e9rios de agrupamento e a informa\u00e7\u00e3o para extra\u00edmos e exibimos nos resultados.<\/p>\n\n\n\n<p>Ao longo deste artigo, abordaremos os conceitos fundamentais do GROUP SQL, como o GROUP BY e as fun\u00e7\u00f5es de agrega\u00e7\u00e3o, bem como a combina\u00e7\u00e3o com <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/join-sql\/\">joins<\/a> para analisar e agrupar informa\u00e7\u00f5es de m\u00faltiplas tabelas. Assim, oferecendo uma base s\u00f3lida para uma compreens\u00e3o mais aprofundada do GROUP SQL e sua aplica\u00e7\u00e3o em an\u00e1lises de dados. Al\u00e9m disso, aprenda sobre <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/update-sql\/\">UPDATE<\/a> no SQL! <\/p>\n\n\n\n<p>O GROUP BY pode ser usado em qualquer banco de dados <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/o-que-e-sql\/\">SQL<\/a>, como, por exemplo, um banco MySQL presente na <a href=\"https:\/\/www.homehost.com.br\/\">hospedagem de sites<\/a> Homehost.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Conte\u00fado<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Sintaxe_basica_do_GROUP_BY\" title=\"Sintaxe b\u00e1sica do GROUP BY\">Sintaxe b\u00e1sica do GROUP BY<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Uso_comuns_do_GROUP_BY\" title=\"Uso comuns do GROUP BY\">Uso comuns do GROUP BY<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Agrupamento_de_dados\" title=\"Agrupamento de dados :\">Agrupamento de dados :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Contagem_de_linhas\" title=\"Contagem de linhas :\">Contagem de linhas :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Calcular_quantiles\" title=\"Calcular quantiles :\">Calcular quantiles :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Analise_de_dados\" title=\"An\u00e1lise de dados :\">An\u00e1lise de dados :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Gerando_relatorios\" title=\"Gerando relat\u00f3rios :\">Gerando relat\u00f3rios :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Identificando_tendencias\" title=\"Identificando tend\u00eancias :\">Identificando tend\u00eancias :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Descoberta_de_patronagens\" title=\"Descoberta de patronagens :\">Descoberta de patronagens :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Identificando_lacunas\" title=\"Identificando lacunas:\">Identificando lacunas:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Deteccao_de_anomalias\" title=\"Detec\u00e7\u00e3o de anomalias :\">Detec\u00e7\u00e3o de anomalias :<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Previsao_de_futuros_salarios\" title=\"Previs\u00e3o de futuros sal\u00e1rios:\">Previs\u00e3o de futuros sal\u00e1rios:<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Recursos_avancados_do_GROUP_BY\" title=\"Recursos avan\u00e7ados do GROUP BY\">Recursos avan\u00e7ados do GROUP BY<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#1_Uso_de_funcoes_de_agregacao_no_GROUP_BY\" title=\"1. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o no GROUP BY:\">1. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o no GROUP BY:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#2_Uso_de_funcoes_de_agregacao_com_subqueros_no_GROUP_BY\" title=\"2. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o com subqueros no GROUP BY:\">2. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o com subqueros no GROUP BY:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#3_Uso_de_HAVING_como_uma_condicao_de_filtro_adicional_apos_o_GROUP_BY\" title=\"3. Uso de HAVING como uma condi\u00e7\u00e3o de filtro adicional ap\u00f3s o GROUP BY:\">3. Uso de HAVING como uma condi\u00e7\u00e3o de filtro adicional ap\u00f3s o GROUP BY:<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#Otimizacao_do_GROUP_BY\" title=\"Otimiza\u00e7\u00e3o do GROUP BY\">Otimiza\u00e7\u00e3o do GROUP BY<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sintaxe_basica_do_GROUP_BY\"><\/span>Sintaxe b\u00e1sica do GROUP BY<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A sintaxe do GROUP BY no SQL utilizamos para agrupar os resultados de uma consulta de acordo com as colunas especificadas. A sintaxe b\u00e1sica do GROUP BY \u00e9 a seguinte:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT column1, column2, ...\nFROM table_name\nGROUP BY column1, column2, ...0<\/code><\/pre>\n\n\n\n<p>Neste exemplo, a consulta seleciona as colunas&nbsp;<code>column1<\/code>,&nbsp;<code>column2<\/code>, etc., da tabela&nbsp;<code>table_name<\/code>&nbsp;e realiza um agrupamento dos resultados por meio do GROUP BY, usando as colunas especificadas no grupo. Assim, aqui est\u00e3o alguns pontos importantes sobre a sintaxe do GROUP BY:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Devemos utilizar o GROUP BY em conjunto com uma consulta SELECT.<\/li>\n\n\n\n<li>A consulta SELECT deve ser seguida imediatamente pelo GROUP BY.<\/li>\n\n\n\n<li>A coluna ou express\u00e3o entre par\u00eanteses () ap\u00f3s o GROUP BY \u00e9 a coluna ou express\u00e3o de agrega\u00e7\u00e3o. Se n\u00e3o for especificado, a coluna de agrega\u00e7\u00e3o padr\u00e3o \u00e9 a coluna COUNT(*).<\/li>\n\n\n\n<li>Podemos est\u00e1 utizando o GROUP BY o para agrupar dados por meio de uma ou mais colunas. Dessa forma, se apenas estivermos uma coluna especificada no GROUP BY, os resultados estar\u00e3o agrupados por linha. E se v\u00e1rias colunas forem especificadas, os resultados estar\u00e3o agrupados por conjunto de valores nas colunas especificadas.<\/li>\n\n\n\n<li>Quando usamos o  GROUP BY  com outras func\u00e7\u00f5es de agrega\u00e7\u00e3o, como SUM, <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/count-sql\/\">COUNT<\/a>, AVG, MAX ou MIN, essas fun\u00e7\u00f5es s\u00e3o aplicadas a cada subconjunto de dados agrupado.<\/li>\n\n\n\n<li>O GROUP BY \u00e9 uma caracter\u00edstica padr\u00e3o do SQL e \u00e9 suportado por todos os principais sistemas de gerenciamento de banco de dados (SGBD).<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Uso_comuns_do_GROUP_BY\"><\/span>Uso comuns do GROUP BY<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>O GROUP BY \u00e9 uma cl\u00e1usula da linguagem SQL que utilizamos para agrupar linhas de dados em uma tabela baseada em uma ou mais colunas. Alguns dos usos comuns do GROUP BY incluem:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Agrupamento_de_dados\"><\/span>Agrupamento de dados :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Contagem_de_linhas\"><\/span>Contagem de linhas :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT COUNT(*) as total\nFROM empleados\nGROUP BY departamento;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo conta o n\u00famero total de linhas em cada departamento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Calcular_quantiles\"><\/span>Calcular quantiles :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo calcula a m\u00e9dia, o desvio padr\u00e3o e a mediana do sal\u00e1rio em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Analise_de_dados\"><\/span>An\u00e1lise de dados :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Gerando_relatorios\"><\/span>Gerando relat\u00f3rios :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia e o desvio padr\u00e3o do sal\u00e1rio em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Identificando_tendencias\"><\/span>Identificando tend\u00eancias :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana,\n       LAG(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_anterior\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia, o desvio padr\u00e3o do sal\u00e1rio, a mediana e o sal\u00e1rio anterior em cada departamento e cidade. Dessa forma, utilizamos o LAG()  para obter o sal\u00e1rio anterior em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Descoberta_de_patronagens\"><\/span>Descoberta de patronagens :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana,\n       LAG(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_anterior,\n       LEAD(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_proximo\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia, o desvio padr\u00e3o do sal\u00e1rio, a mediana, o sal\u00e1rio anterior e o sal\u00e1rio pr\u00f3ximo em cada departamento e cidade. Utilizamos o LAG() e o LEAD() para obtermos o sal\u00e1rio anterior e o sal\u00e1rio pr\u00f3ximo em cada departamento e cidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Identificando_lacunas\"><\/span>Identificando lacunas:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana,\n       LAG(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_anterior,\n       LEAD(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_proximo,\n       LAG(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_anterior_2,\n       LEAD(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_proximo_2\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia, o desvio padr\u00e3o do sal\u00e1rio, a mediana, o sal\u00e1rio anterior, o sal\u00e1rio pr\u00f3ximo, o sal\u00e1rio anterior a 2 per\u00edodos e o sal\u00e1rio pr\u00f3ximo a 2 per\u00edodos em cada departamento e cidade. Utilizamos os Lag e Lead para obter os sal\u00e1rios anterior e pr\u00f3ximo em cada departamento e cidade, com um deslocamento de 2 per\u00edodos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Deteccao_de_anomalias\"><\/span>Detec\u00e7\u00e3o de anomalias :<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana,\n       LAG(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_anterior,\n       LEAD(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_proximo,\n       LAG(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_anterior_2,\n       LEAD(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_proximo_2,\n       CASE\n         WHEN salario &gt; QUANTILE_CONT(0.9, salario) THEN 'Anomalia'\n         ELSE 'Normal'\n       END as anomalia\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo utiliza fun\u00e7\u00f5es como <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/case-when-sql\/\">CASE WHEN<\/a>, FROM e SELECT para lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia, o desvio padr\u00e3o do sal\u00e1rio, a mediana, o sal\u00e1rio anterior, o sal\u00e1rio pr\u00f3ximo, o sal\u00e1rio anterior a 2 per\u00edodos e o sal\u00e1rio pr\u00f3ximo a 2 per\u00edodos em cada departamento e cidade, assim como uma anomalia detectada com base na quantile 0.9. Dessa forma, se tivermos o valor do sal\u00e1rio maior do que a quantile 0.9, ent\u00e3o consideramos  uma anomalia. Caso contr\u00e1rio, consideramos normal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Previsao_de_futuros_salarios\"><\/span>Previs\u00e3o de futuros sal\u00e1rios:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT departamento, cidade, COUNT(*) as empleados,\n       SUM(salario) as total_salarios,\n       AVG(salario) as media,\n       STDEV(salario) as desvio_padrao,\n       PERCENTILE_CONT(0.5) within group (order by salario) as mediana,\n       LAG(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_anterior,\n       LEAD(salario, 1, 0) over (partition by departamento, cidade order by salario) as salario_proximo,\n       LAG(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_anterior_2,\n       LEAD(salario, 2, 0) over (partition by departamento, cidade order by salario) as salario_proximo_2,\n       ARIMA(salario, 1, 1, 1) as previsao_salario\nFROM empleados\nGROUP BY departamento, cidade;<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo lista o n\u00famero de empleados, o total de sal\u00e1rios, a m\u00e9dia, o desvio padr\u00e3o do sal\u00e1rio, a mediana, o sal\u00e1rio anterior, o sal\u00e1rio pr\u00f3ximo, o sal\u00e1rio anterior a 2 per\u00edodos e o sal\u00e1rio pr\u00f3ximo a 2 per\u00edodos em cada departamento e cidade, assim como uma previs\u00e3o de sal\u00e1rio utilizando o modelo ARIMA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Recursos_avancados_do_GROUP_BY\"><\/span>Recursos avan\u00e7ados do GROUP BY<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Os recursos avan\u00e7ados do GROUP BY em SQL permitem realizar an\u00e1lises mais complexas e detalhadas em grandes volumes de dados. Aqui est\u00e3o alguns exemplos de como utilizamos esses recursos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_Uso_de_funcoes_de_agregacao_no_GROUP_BY\"><\/span>1. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o no GROUP BY:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Ao usar fun\u00e7\u00f5es de agrega\u00e7\u00e3o no GROUP BY, podemos realizar c\u00e1lculos mais complexos com os dados agrupados. Por exemplo, podemos usar a fun\u00e7\u00e3o SUM para calcular a soma total de uma coluna em todos os grupos, a fun\u00e7\u00e3o COUNT para obter o n\u00famero de linhas em cada grupo, a fun\u00e7\u00e3o AVG para calcular a m\u00e9dia de uma coluna em todos os grupos, a fun\u00e7\u00e3o MAX para encontrar o valor m\u00e1ximo em uma coluna em todos os grupos, e a fun\u00e7\u00e3o MIN para encontrar o valor m\u00ednimo em uma coluna em todos os grupos.<\/p>\n\n\n\n<p>Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT Country, Region, SUM(Sales) AS TotalSales\nFROM Sales\nGROUP BY Country, Region<\/code><\/pre>\n\n\n\n<p>Este exemplo ir\u00e1 apresentar a soma total de vendas para cada combina\u00e7\u00e3o de pa\u00eds e regi\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_Uso_de_funcoes_de_agregacao_com_subqueros_no_GROUP_BY\"><\/span>2. Uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o com subqueros no GROUP BY:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Al\u00e9m de usar fun\u00e7\u00f5es de agrega\u00e7\u00e3o simples, usamos subqueros para realizar c\u00e1lculos mais complexos. Isso permite queimos realizar an\u00e1lises mais detalhadas em nosos dados.<\/p>\n\n\n\n<p>Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT Country, Region, (SELECT AVG(Sales) FROM Sales WHERE Country = 'USA') AS USASales\nFROM Sales\nGROUP BY Country, Region<\/code><\/pre>\n\n\n\n<p>Neste exemplo, estamos usando um subquery para calcular a m\u00e9dia de vendas apenas para o pa\u00eds Estados Unidos, e \u0437\u0430\u0442\u0435\u043c apresentando essa m\u00e9dia para cada combina\u00e7\u00e3o de pa\u00eds e regi\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_Uso_de_HAVING_como_uma_condicao_de_filtro_adicional_apos_o_GROUP_BY\"><\/span>3. Uso de HAVING como uma condi\u00e7\u00e3o de filtro adicional ap\u00f3s o GROUP BY:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>O HAVING \u00e9 um clause que usamos ap\u00f3s o GROUP BY para filtrar os grupos de dados com base em uma condi\u00e7\u00e3o espec\u00edfica. Assim, permitindo analisar apenas os grupos que atendem a uma determinada condi\u00e7\u00e3o.<\/p>\n\n\n\n<p>Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT Country, Region, AVG(Sales) AS AverageSales\nFROM Sales\nGROUP BY Country, Region\nHAVING AverageSales &gt; 100000<\/code><\/pre>\n\n\n\n<p>Neste exemplo, estamos usando o HAVING para filtrar apenas os grupos de dados em que a m\u00e9dia de vendas \u00e9 maior do que 100.000.<\/p>\n\n\n\n<p>Portanto, os recursos avan\u00e7ados do GROUP BY em SQL permitem realizar an\u00e1lises mais complexas e detalhadas em grandes volumes de dados. O uso de fun\u00e7\u00f5es de agrega\u00e7\u00e3o, subqueros e HAVING permite queimos realizar c\u00e1lculos mais precisos e filtrar os dados de acordo com nossas necessidades.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Otimizacao_do_GROUP_BY\"><\/span>Otimiza\u00e7\u00e3o do GROUP BY<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A otimiza\u00e7\u00e3o do GROUP BY \u00e9 uma importante parte do desempenho da consulta SQL, pois este \u00e9 um dos recursos mais utilizados em consultas que envolvem an\u00e1lise de dados. Aqui est\u00e3o algumas estrat\u00e9gias gerais de otimiza\u00e7\u00e3o de consulta SQL que podem melhorar o desempenho do GROUP BY:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Utilize \u00edndices:<\/strong> \u00cdndices podem ser usados \u200b\u200bpara agilizar a busca de dados durante a execu\u00e7\u00e3o de uma consulta. Verifique se os \u00edndices est\u00e3o sendo usados \u200b\u200bcorretamente nas colunas que est\u00e3o sendo usadas no GROUP BY.<\/li>\n\n\n\n<li><strong>Particionamento de tabelas:<\/strong> Particionar as tabelas pode ajudar a reduzir o tempo de execu\u00e7\u00e3o da consulta, especialmente se a tabela for grande. O partitionamento pode ser feito por meio de uma fun\u00e7\u00e3o de partitionamento ou por meio de uma clausula de partitionamento.<\/li>\n\n\n\n<li><strong>Reduzir o n\u00famero de linhas antes do GROUP BY:<\/strong> Se poss\u00edvel, tente reduzir o n\u00famero de linhas que est\u00e3o sendo processadas antes do GROUP BY. Isso pode ser feito com a utiliza\u00e7\u00e3o de uma cl\u00e1usula WHERE ou com a utiliza\u00e7\u00e3o de uma subconsulta.<\/li>\n\n\n\n<li><strong>Utilize fun\u00e7\u00f5es de agrega\u00e7\u00e3oefficientes:<\/strong> Certifique-se de que as fun\u00e7\u00f5es de agrega\u00e7\u00e3o est\u00e3o sendo usadas de maneira eficiente. Por exemplo, em vez de usar a fun\u00e7\u00e3o SUM para calcular a soma de todos os valores em uma coluna, voc\u00ea pode usar a fun\u00e7\u00e3o SUMIF para calcular a soma de apenas os valores que atendem a uma determinada condi\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Utilize subconsultas:<\/strong> Em vez de usar uma consulta grande e complexa, tente dividir a consulta em subconsultas menores e mais simples. Isso pode ajudar a reduzir o tempo de execu\u00e7\u00e3o da consulta.<\/li>\n\n\n\n<li><strong>Utilize conjuntos de dados: <\/strong>Dessa forma, em vez de usar uma tabela grande e complexa, tente dividir os dados em conjuntos de dados menores e mais simples.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O GROUP BY SQL \u00e9 uma t\u00e9cnica essencial no SQL que permite agrupar e analisar dados de maneira eficiente. A principal motiva\u00e7\u00e3o por tr\u00e1s do GROUP SQL \u00e9 simplificar a an\u00e1lise de grandes conjuntos de dados, permitindo que os usu\u00e1rios extraiam informa\u00e7\u00f5es significativas e criem relat\u00f3rios com base em crit\u00e9rios espec\u00edficos. Dessa forma, utilizamos o [&hellip;]<\/p>\n","protected":false},"author":33,"featured_media":11439,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_helpful_status":1,"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,42],"tags":[],"class_list":["post-11408","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mysql","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost<\/title>\n<meta name=\"description\" content=\"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost\" \/>\n<meta property=\"og:description\" content=\"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"Homehost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Homehost\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-21T15:59:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-24T16:02:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1073\" \/>\n\t<meta property=\"og:image:height\" content=\"719\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sch\u00eania T\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Homehost\" \/>\n<meta name=\"twitter:site\" content=\"@Homehost\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sch\u00eania T\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/\",\"name\":\"GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost\",\"isPartOf\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png\",\"datePublished\":\"2023-10-21T15:59:15+00:00\",\"dateModified\":\"2023-11-24T16:02:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/880e31fe4f09cfa53d60a46d9c2010aa\"},\"description\":\"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png\",\"contentUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png\",\"width\":1073,\"height\":719,\"caption\":\"group by sql\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.homehost.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GROUP BY SQL: como agrupar e analisar dados no SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/\",\"name\":\"Homehost\",\"description\":\"Hospedagem De Sites\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/880e31fe4f09cfa53d60a46d9c2010aa\",\"name\":\"Sch\u00eania T\",\"description\":\"Cientista de dados, apaixonada por ferramentas de tecnologia e games. Graduanda em Estat\u00edstica pela UFPB. Seu hobby \u00e9 maratonar s\u00e9ries, curtir uma boa m\u00fasica trabalhando ou cozinhando, ir ao cinema e aprender coisas novas! Contato: schenia.blog@homehost.com.br\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost","description":"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/","og_locale":"pt_BR","og_type":"article","og_title":"GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost","og_description":"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!","og_url":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/","og_site_name":"Homehost","article_publisher":"https:\/\/www.facebook.com\/Homehost\/","article_published_time":"2023-10-21T15:59:15+00:00","article_modified_time":"2023-11-24T16:02:27+00:00","og_image":[{"width":1073,"height":719,"url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png","type":"image\/png"}],"author":"Sch\u00eania T","twitter_card":"summary_large_image","twitter_creator":"@Homehost","twitter_site":"@Homehost","twitter_misc":{"Escrito por":"Sch\u00eania T","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/","url":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/","name":"GROUP BY SQL: como agrupar e analisar dados no SQL | Homehost","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png","datePublished":"2023-10-21T15:59:15+00:00","dateModified":"2023-11-24T16:02:27+00:00","author":{"@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/880e31fe4f09cfa53d60a46d9c2010aa"},"description":"O GROUP BY \u00e9 uma ferramenta poderosa para realizar an\u00e1lise de dados em tabelas do SQL, que podemos agrupar grande quantidade de dados!","breadcrumb":{"@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#primaryimage","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png","width":1073,"height":719,"caption":"group by sql"},{"@type":"BreadcrumbList","@id":"https:\/\/www.homehost.com.br\/blog\/wordpress\/group-by-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.homehost.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"GROUP BY SQL: como agrupar e analisar dados no SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.homehost.com.br\/blog\/#website","url":"https:\/\/www.homehost.com.br\/blog\/","name":"Homehost","description":"Hospedagem De Sites","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/880e31fe4f09cfa53d60a46d9c2010aa","name":"Sch\u00eania T","description":"Cientista de dados, apaixonada por ferramentas de tecnologia e games. Graduanda em Estat\u00edstica pela UFPB. Seu hobby \u00e9 maratonar s\u00e9ries, curtir uma boa m\u00fasica trabalhando ou cozinhando, ir ao cinema e aprender coisas novas! Contato: schenia.blog@homehost.com.br"}]}},"modified_by":"ad_hmhst","jetpack_featured_media_url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/10\/GOUP-BY-SQL.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=11408"}],"version-history":[{"count":14,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11408\/revisions"}],"predecessor-version":[{"id":12363,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/11408\/revisions\/12363"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media\/11439"}],"wp:attachment":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=11408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=11408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=11408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}