Voltar para a lista de artigos Artigos
7 minutos de leitura

Diferença entre GROUP BY e ORDER BY em palavras simples

Para alguém que está aprendendo SQL, um dos lugares mais comuns para ficar preso é ao aprender o comando GROUP BY. GROUP BY e ORDER BY são duas palavras-chave importantes em SQL que usamos para organizar dados. A diferença entre GROUP BY e ORDER BY é que ORDER BY é mais simples do que GROUP BY e geralmente é introduzido cedo em um curso de SQL.

Às vezes, as pessoas ficam bastante confusas sobre estes dois conceitos (SQL ORDER BY vs. GROUP BY), e a razão por trás desta confusão é a falta de compreensão de ambos os conceitos. Enquanto ambos são usados para organizar os dados com base em seus valores, seus casos de uso diferem bastante um do outro. Se aprendermos corretamente estes dois conceitos, a confusão naturalmente desaparecerá.

Neste artigo, usei um banco de dados interessante publicado aqui. O conjunto de dados contém mais de 2000 cervejas artesanais e 500 cervejarias usadas nos Estados Unidos. Os dados estão incluídos em arquivos CSV, que você pode importar facilmente para qualquer um de seus bancos de dados usando uma ferramenta GUI. Um de meus colegas mostrou como fazer isso em um exemplo dos dados da pesquisa LearnSQL.

Há duas tabelas neste conjunto de dados: beers e breweries. Vamos ver o conjunto de dados da amostra do beers tabela para obter uma melhor imagem da mesma.

mesa de cervejas

ENCOMENDAR POR

Nosso primeiro tópico é ORDER BY. Antes de tentar entender a diferença entre GROUP BY e ORDER BY, vamos ver como funciona o comando SELECT.

Vamos SELECT o nome, a cidade e o estado de cada registro no breweries mesa.

SELECT name, 
 city, 
 state 
FROM breweries

Quando você executar o comando acima, você obterá algo como o seguinte:

SELECIONE o nome, a cidade e o estado da mesa das cervejeiras

Você pode ver que estes resultados não são ordenados de acordo com seus nomes. A ordem padrão para uma declaração SELECT é não determinística, o que significa que a ordem dos resultados pode diferir a qualquer momento em que você executar seu código.

Entretanto, uma ordem não-determinística geralmente não é o que queremos. Por exemplo, suponha que você gostaria de ordenar os resultados por ordem ascendente ou descendente de sua coluna state; nesse caso, você precisaria do comando ORDER BY. Tudo o que você precisa fazer é usar a cláusula ORDER BY desta forma:

SELECT name, 
city, 
state 
FROM 	breweries 
ORDER BY state ASC
ORDEM POR

Da mesma forma, você pode obter resultados também na ordem decrescente do estado.

SELECT name, 
city, 
state 
FROM breweries
ORDER BY state DESC
ordem decrescente

Você pode ver os registros que são organizados por ordem decrescente do estado. A ordem padrão do comando ORDER BY é a ordem ascendente. Portanto, se você não usou ASC ou DESC, os resultados virão em ordem ascendente.

Você pode usar ORDER BY em duas ou mais colunas. Verifique a seguinte consulta:

SELECT name, 
 city, 
 state 
FROM breweries
ORDER BY state,
         city DESC

Esta consulta primeiro resulta na ordem ascendente do estado, seguida pela ordem descendente da cidade.

ORDEM POR

Agora, o interessante é que alguém que não sabe como usar muito GROUP BY pode usar ORDER BY para analisar os dados. Por exemplo, suponha que você queira descobrir quantas cervejarias existem em um determinado state. O que você poderia fazer é obter os resultados ordenados por seus estados. Isto lhe dará um bom resultado agrupado a partir do qual você poderá contar manualmente o número de cervejarias de um determinado state.

Portanto, alguém que não tem um forte domínio de GROUP BY pode pensar que ORDER BY é uma excelente maneira de agrupar os mesmos dados. Essa idéia não está errada. Se você quiser exibir os dados de uma forma bem agrupada, ORDER BY é uma boa aposta.

GROUP BY não é uma forma de exibir dados em grupos, mas é mais uma forma de analisar dados em grupos. Para compreender melhor a SQL ORDER BY vs. GROUP BY, vamos dar uma olhada em GROUP BY com mais detalhes.

GROUP BY

Na maioria dos textos, GROUP BY é definido como uma forma de agregação de registros pelas colunas especificadas que permitem executar funções de agregação em colunas não agrupadas (como SUM, COUNT, AVG, etc.). Em outras palavras, a finalidade da cláusula GROUP BY é resumir combinações únicas de valores de colunas.

Alguns exemplos serão mais esclarecidos:

Vamos agrupar beers tabela baseada na coluna style.

SELECT style 
FROM beers 
GROUP BY style

A consulta SQL acima irá gerar os seguintes resultados

ORDEM POR

Então, vamos ver o que aconteceu aqui. Esta consulta retornou um resultado de cada valor style. Isso significa que SQL primeiro faz grupos a partir dos mesmos valores style e retorna uma linha representando o grupo.

E qual é o uso exato do GROUP BY? É claro, você pode usar GROUP BY para encontrar valores distintos. Mas SQL tem uma palavra-chave DISTINCT específica para isso. A real importância do GROUP BY pode ser vista quando você o utiliza com funções agregadas como SUM(), COUNT(). Para entendê-lo melhor, execute a seguinte consulta SQL:

SELECT style, 
 COUNT(Name) 
FROM beers 
GROUP BY style

Ela irá gerar o seguinte resultado:

ORDEM POR

Aqui, SQL primeiro agrupa os resultados com base na coluna style. Em seguida, verifica quantos nomes existem em cada grupo e retorna os valores style e a contagem dos nomes para cada estilo.

Se você olhar com atenção, poderá notar que os resultados já estão ordenados em ordem ascendente. Esta situação ocasionalmente engana as pessoas a acreditar que GROUP BY ordena os resultados. Na realidade, não há garantia de que GROUP BY exibirá os resultados em ordem ascendente. Se você precisar de resultados em uma ordem específica, você mesmo terá que fazê-lo como abaixo:

SELECT style, 
COUNT(Name) 
FROM beers 
GROUP BY style 
ORDER BY style

Portanto, GROUP BY funciona muito bem junto com ORDER BY.

Portanto, agora você sabe como usar GROUP BY para contar um conjunto de valores pertencentes a um determinado grupo. Vou lhe dar mais dois exemplos do mundo real para entender o uso do GROUP BY.

  1. Pense em uma tabela de funcionários onde você armazena informações sobre os funcionários, tais como seu nome, função e salário. Cada funcionário pertence a um departamento diferente, como finanças, TI, ou transporte. Agora, suponha que você queira obter a soma dos salários que pagou aos funcionários com base em seu departamento. Você precisará executar um comando SQL como abaixo:

    SELECT department,
     SUM(salary) 
    FROM employee 
    GROUP BY department
    
  2. Suponha que você tenha um site de eCommerce que venda vários tipos de produtos. Em seu banco de dados, você tem uma tabela para armazenar informações sobre estoques. Se você quiser encontrar a contagem de cada tipo de produto, você pode usar a função GROUP BY com COUNT agregado:

    SELECT product_type, 
     COUNT(product_id) 
    FROM stock
    GROUP BY product_type
    

Vamos levar esta lição um pouco mais adiante para aumentar seus conhecimentos sobre GROUP BY. Você também pode agrupar os resultados usando duas colunas. Por exemplo, vamos agrupar os beers tabela baseada em style e brewery_id.

SELECT style,
 brewery_id,
 COUNT(Name) 
FROM beers 
GROUP BY style,
   brewery_id

Esta consulta SQL irá dividir ainda mais style grupos usando brewery_id. Ao executá-la, você obterá o seguinte resultado:

ORDEM POR

Conclusão:

Neste artigo, expliquei a diferença entre ORDER BY e GROUP BY. ORDER BY classifica os dados com base nos dados de uma coluna. Naturalmente, como resultado da ordenação, os dados dos mesmos valores serão reunidos como um grupo, o que facilitará a análise manual posterior. Mas GROUP BY é a forma SQL de analisar dados semelhantes.

Não há um uso real do GROUP BY sem funções de agregação. Algumas vezes, GROUP BY pode retornar resultados em ordem ordenada, mas você não deve confiar nisto. A ordem em que os resultados são retornados não é determinística e depende de como o motor db executa a consulta.

Após ler este artigo, você deve ser capaz de usar GROUP BY e ORDER BY com mais confiança. Se você quiser refinar seus conhecimentos sobre SQL ORDER BY vs. GROUP BY, verifique este conjunto de práticas - ele contém uma seção especial dedicada a este assunto.