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
- Vamos agrupar os dados por estado:
SELECT seller_state,
count(seller_id) as QTD
FROM tb_sellers
GROUP BY seller_state
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:
Outro Exemplo:
SELECT *
FROM tb_order_reviews
Outra forma:
SELECT COUNT(*) AS NUM_LINHAS
FROM tb_order_reviews
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
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
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!