MySQL - Usando HAVING para limitar queries com agrupamentos GROUP
Agrupamentos são incrivelmente uteis quando precisamos fazer somas ou contar itens de várias linhas de um DB. Apesar de muitas pessoas utilizarem a linguagem em que estão desenvolvendo sua aplicação para fazer este tipo de operação as queries dos bancos de dados são a forma mais eficiente de se fazer isto.
Vamos supor que você tenha uma tabela como a que segue abaixo:
E necessitamos do total de veículos de cada CPF. Então teríamos um SELECT deste tipo:
SELECT Nome,CPF,COUNT(CPF) AS Quantidade FROM veiculos GROUP BY CPF.
E nosso resultado seria algo como
Mas e se nos interessasse resultados que trouxessem apenas cpf's com mais de dois carros?
É para isto que usamos HAVING. HAVIING é como um WHERE porém utilizado para limitar buscas em agrupamentos.
No exemplo acima fariamos assim:
SELECT Nome,CPF,COUNT(CPF) AS Quantidade FROM veiculos GROUP BY CPF HAVING COUNT(CPF) > 1
Isto nos traria apenas os CPF's com mais um carro
Uma boa utilização também desta técnica é na identificação de registros duplicados. Pode ocorrer, por exemplo, que em uma certa tabela o campo CPF não foi (ou não pode ser) setado como chave ou indice de valor único. Com a técnica do HAVING você pode retornar apenas os registros com dois ou mais CPF's e efetuar algum tipo de validação, ou estudar o porquê do campo estar duplicado.
Os agrupamentos mais comuns incluem COUNT(), SUM(), AVG(), MIN() e MAX().
Podemos não só utilizar o HAVING com agrupamentos mas também como um WHERE
SELECT Nome,CPF AS Quantidade FROM veiculos HAVING Nome = 'Antonio'
teria o mesmo efeito que
SELECT Nome,CPF AS Quantidade FROM veiculos WHERE Nome = 'Antonio'
Porém isto não é recomendável, já que WHERE é mais eficiente que HAVING neste tipo de query.
Por hoje é isto!
Vamos supor que você tenha uma tabela como a que segue abaixo:
Nome | CPF | Veiculo | |
Antonio | 240.400.462-00 | Corsa | |
Antonio | 240.400.462-00 | Vectra | |
Pedro | 798.455.105-74 | Gol |
E necessitamos do total de veículos de cada CPF. Então teríamos um SELECT deste tipo:
SELECT Nome,CPF,COUNT(CPF) AS Quantidade FROM veiculos GROUP BY CPF.
E nosso resultado seria algo como
Nome | CPF | Quantidade | |
Antonio | 240.400.462-00 | 2 | |
Pedro | 798.455.105-74 | 1 |
Mas e se nos interessasse resultados que trouxessem apenas cpf's com mais de dois carros?
É para isto que usamos HAVING. HAVIING é como um WHERE porém utilizado para limitar buscas em agrupamentos.
No exemplo acima fariamos assim:
SELECT Nome,CPF,COUNT(CPF) AS Quantidade FROM veiculos GROUP BY CPF HAVING COUNT(CPF) > 1
Isto nos traria apenas os CPF's com mais um carro
Nome | CPF | Veiculo | |
Antonio | 240.400.462-00 | 2 |
Uma boa utilização também desta técnica é na identificação de registros duplicados. Pode ocorrer, por exemplo, que em uma certa tabela o campo CPF não foi (ou não pode ser) setado como chave ou indice de valor único. Com a técnica do HAVING você pode retornar apenas os registros com dois ou mais CPF's e efetuar algum tipo de validação, ou estudar o porquê do campo estar duplicado.
Os agrupamentos mais comuns incluem COUNT(), SUM(), AVG(), MIN() e MAX().
Podemos não só utilizar o HAVING com agrupamentos mas também como um WHERE
SELECT Nome,CPF AS Quantidade FROM veiculos HAVING Nome = 'Antonio'
teria o mesmo efeito que
SELECT Nome,CPF AS Quantidade FROM veiculos WHERE Nome = 'Antonio'
Porém isto não é recomendável, já que WHERE é mais eficiente que HAVING neste tipo de query.
Por hoje é isto!
Muito bom, utilizei para achar registros duplicados. Valeu.
ResponderExcluirBanaca Rodrigo!
ResponderExcluir