SQL — Como utilizar os comandos: GROUP BY, ORDER BY e HAVING

Igorps
4 min readJan 27, 2023

--

Olá, seguindo o ritmo do último post, hoje, vamos falar de três funções:

· GROUP BY

· ORDER BY

· HAVING

Textos em itálico foram produzidos com a ajuda do Chat GPT.

Você pode utilizar o VS Code (com a extensão SQLite, ou carregar o arquivo .db online e utilizar este site: SQLite Online)

· Utilizaremos este dataset da Olist (empresa de E-commerce) DOWNLOAD

· Estrutura do Banco (tabelas e chaves p/ relacionamento entre tabelas)

GROUPBY

A função GROUP BY em SQL permite agrupar linhas de dados selecionadas de uma tabela por uma ou mais colunas específicas. Isso permite que você execute operações agregadas, como soma, média, contagem, etc., sobre os grupos de dados criados.

Exemplo 1:

SELECT    column1, 
SUM(column2)

FROM table_name
GROUP BY column1

Passo a passo:

SELECT  *

FROM tb_sellers
SQLite 3
Resultado da busca
  • Vamos agrupar os dados por estado:
SELECT   seller_state,
count(seller_id) as QTD

FROM tb_sellers
GROUP BY seller_state
SQLite 3
Resultado da busca

ORDERBY ( ASC OU DESC )

ORDER BY é uma cláusula SQL que permite ordenar as linhas retornadas por uma consulta de acordo com uma ou mais colunas específicas.

ORDER BY ASC (ORDEM CRESCENTE)

ORDER BY DESC (ORDEM DECRESCENTE)

Exemplo anterior:

Consulta
Resultado com ORDER BY QTD DESC

Outro Exemplo:

SELECT  *
FROM tb_order_reviews
Query
Retorno: 100.000 registros

Outra forma:

SELECT COUNT(*) AS NUM_LINHAS

FROM tb_order_reviews
Query
Resultado

Outra forma:

SELECT      
review_score,
COUNT(*) AS 'PREENCHIDO+VAZIO',
COUNT(review_comment_title) AS 'PREENCHIDO',
COUNT(*) - COUNT(review_comment_title) AS 'VAZIO'

FROM tb_order_reviews
GROUP BY review_score
ORDER BY review_score DESC
Query
Resultado:

HAVING

HAVING é usado para filtrar linhas após agrupar ou agregar os dados. Ele é usado para limitar quais grupos ou agregações serão incluídas na consulta.

SELECT  
order_id,
price,
freight_value,
SUM(price + freight_value) AS TOTAL

FROM tb_order_items
GROUP BY order_id
HAVING TOTAL > 100
ORDER BY TOTAL ASC

Criamos uma nova coluna “TOTAL” com a SOMA (PREÇO + FRETE)

Utilizamos a função GROUP BY para que a operação de soma respeite o contexto de linha de acordo com as ordens.

Adicionamos um filtro para que somente apresente as ordens em que o TOTAL (Preço + Frete) seja maior que 100.

Por fim, ordenamos de forma crescente (ASC) em relação a coluna total.

SELECT  
order_id,
price,
freight_value,
SUM(price + freight_value) AS TOTAL

FROM tb_order_items
GROUP BY order_id
HAVING TOTAL > 100
ORDER BY TOTAL ASC
Query
Resultado

Para melhor entendimento:

Recomendo este vídeo (Null Handling and Count)

Materiais e fontes utilizados:

· Livro Introdução a Linguagem SQL

· Site SQLShack: https://www.sqlshack.com/

· Site Universidade dos Dados: https://estatsite.com.br/?s=SQL

· Teo Calvo: https://www.twitch.tv/teomewhy

Obrigado!

--

--