É 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.
É 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.
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:
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!