Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Mostrar um exemplo de uma QUERRY que tenha o WHERE e o HAVING.

É mencionado que existe uma ordem das cláusulas em SQL, sendo "SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY". Seria interessante mostrar uma QUERRY que tenha as interações entre as duas formas de filtro.

1 resposta
solução!

Olá Tiago, tudo bem com você?

Vou te mostrar um exemplo prático que utiliza ambas as cláusulas para que você possa ver como elas funcionam juntas.Vamos considerar uma tabela chamada vendas com as seguintes colunas: vendedor_id, valor_venda e data_venda. Código de criação e inserção de dados:

CREATE TABLE vendas (
    vendedor_id INT,
    valor_venda DECIMAL(10, 2),
    data_venda DATE
);

INSERT INTO vendas (vendedor_id, valor_venda, data_venda) VALUES
(1, 5000.00, '2023-01-15'),
(2, 8000.00, '2023-02-20'),
(1, 7000.00, '2022-12-10'),
(3, 12000.00, '2023-05-05'),
(1, 11000.00, '2023-09-30');

Suponha que queremos encontrar os vendedores que realizaram vendas no ano de 2023 e cujo total de vendas seja superior a 10.000. Para isso, podemos usar tanto a cláusula WHERE quanto a cláusula HAVING:

SELECT vendedor_id, SUM(valor_venda) AS total_vendas
FROM vendas
WHERE strftime('%Y', data_venda) = '2023'
GROUP BY vendedor_id
HAVING total_vendas > 10000;

Resultado:

Imagem do resultado do código colocando os vendedores 1 e 3 como quem mais vendeu

Neste código:

  • SELECT vendedor_id, SUM(valor_venda) AS total_vendas: Seleciona o vendedor_id e a soma dos valores de venda (valor_venda) para cada vendedor, renomeando essa soma como total_vendas.

  • FROM vendas: Indica a tabela de onde os dados serão extraídos.

  • WHERE strftime('%Y', data_venda) = '2023': Filtra os registros para incluir apenas as vendas realizadas no ano de 2023. Aqui, usamos a função strftime para extrair o ano da data de venda.

  • GROUP BY vendedor_id: Agrupa os registros por vendedor_id para calcular a soma das vendas para cada vendedor.

  • HAVING total_vendas > 10000: Filtra os grupos criados pelo GROUP BY, mantendo apenas aqueles onde o total de vendas é superior a 10.000.

Esse exemplo mostra como WHERE e HAVING podem ser usados juntos: WHERE filtra os registros antes do agrupamento, enquanto HAVING filtra os grupos após a agregação.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!