Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Cláusula Having | Agrupamento
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
SQL Intermediário

bookCláusula Having

O sistema de informações escolares está sendo revisado para garantir a consistência e precisão dos dados. Como parte dessa revisão, uma nova tarefa de análise de dados foi atribuída.

Durante verificações de rotina, foi descoberto que alguns registros de alunos contêm mais de uma entrada de nota, mesmo que o sistema tenha sido projetado para armazenar apenas uma nota por aluno.

Sua tarefa é ajudar a identificar esses casos para uma análise interna adicional.

Vamos pensar juntos sobre como podemos fazer isso. Você pode começar considerando que podemos fazer isso usando uma cláusula WHERE, e ficaria algo assim:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Mas, como você pode ver, recebemos um erro indicando que não podemos usar funções de agregação dentro de uma cláusula WHERE. É nesse momento que precisamos da cláusula HAVING.

Suponha que seja necessário obter os departamentos onde o salário médio dos funcionários é inferior a $70.000 por ano. Para isso, será necessário utilizar uma função de agregação e a cláusula HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Recebemos um departamento em resposta utilizando a cláusula HAVING, onde definimos uma condição para a coluna pela qual agrupamos os dados.

Note
Nota

Para utilizar agregação de dados dentro da cláusula HAVING, é necessário haver agrupamento de dados na consulta. Como na consulta acima, agrupamos os dados pela coluna department.

Vamos analisar a sintaxe mais generalizada da cláusula HAVING e quando é mais adequado utilizá-la:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Vamos também compreender brevemente a principal diferença entre as cláusulas WHERE e HAVING e quando utilizar cada uma delas:

  1. A cláusula WHERE é utilizada antes da agregação dos dados, enquanto a cláusula HAVING é utilizada após a agregação dos dados;
  2. A cláusula WHERE é escrita antes do GROUP BY, enquanto a cláusula HAVING é escrita após o GROUP BY.

Essas são as duas principais diferenças que você precisa lembrar para o uso correto da cláusula HAVING. Agora, vamos retornar à tarefa proposta pela escola.

Tarefa

Swipe to start coding

Alguns alunos aparecem várias vezes nos registros de notas, o que indica entradas duplicadas ou inesperadas no sistema.

Você precisa recuperar os sobrenomes de todos os alunos cujos registros contêm mais de uma entrada de nota. O resultado será utilizado pela administração escolar para revisar e corrigir os dados, se necessário.

Retorne apenas a lista de sobrenomes que atendem a essa condição, ordenada alfabeticamente.

Instruções Resumidas

  • Recuperar a coluna student_surname.
  • Agrupar os dados por student_surname.
  • Utilizar a cláusula HAVING para filtrar os resultados com base em COUNT(grade) > 1.
  • Ordenar os resultados por student_surname.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you show me how to use the HAVING clause to find students with multiple grade entries?

Can you explain why the HAVING clause works in this scenario but WHERE does not?

Can you provide an example query for the school task using HAVING?

close

bookCláusula Having

Deslize para mostrar o menu

O sistema de informações escolares está sendo revisado para garantir a consistência e precisão dos dados. Como parte dessa revisão, uma nova tarefa de análise de dados foi atribuída.

Durante verificações de rotina, foi descoberto que alguns registros de alunos contêm mais de uma entrada de nota, mesmo que o sistema tenha sido projetado para armazenar apenas uma nota por aluno.

Sua tarefa é ajudar a identificar esses casos para uma análise interna adicional.

Vamos pensar juntos sobre como podemos fazer isso. Você pode começar considerando que podemos fazer isso usando uma cláusula WHERE, e ficaria algo assim:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Mas, como você pode ver, recebemos um erro indicando que não podemos usar funções de agregação dentro de uma cláusula WHERE. É nesse momento que precisamos da cláusula HAVING.

Suponha que seja necessário obter os departamentos onde o salário médio dos funcionários é inferior a $70.000 por ano. Para isso, será necessário utilizar uma função de agregação e a cláusula HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Recebemos um departamento em resposta utilizando a cláusula HAVING, onde definimos uma condição para a coluna pela qual agrupamos os dados.

Note
Nota

Para utilizar agregação de dados dentro da cláusula HAVING, é necessário haver agrupamento de dados na consulta. Como na consulta acima, agrupamos os dados pela coluna department.

Vamos analisar a sintaxe mais generalizada da cláusula HAVING e quando é mais adequado utilizá-la:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Vamos também compreender brevemente a principal diferença entre as cláusulas WHERE e HAVING e quando utilizar cada uma delas:

  1. A cláusula WHERE é utilizada antes da agregação dos dados, enquanto a cláusula HAVING é utilizada após a agregação dos dados;
  2. A cláusula WHERE é escrita antes do GROUP BY, enquanto a cláusula HAVING é escrita após o GROUP BY.

Essas são as duas principais diferenças que você precisa lembrar para o uso correto da cláusula HAVING. Agora, vamos retornar à tarefa proposta pela escola.

Tarefa

Swipe to start coding

Alguns alunos aparecem várias vezes nos registros de notas, o que indica entradas duplicadas ou inesperadas no sistema.

Você precisa recuperar os sobrenomes de todos os alunos cujos registros contêm mais de uma entrada de nota. O resultado será utilizado pela administração escolar para revisar e corrigir os dados, se necessário.

Retorne apenas a lista de sobrenomes que atendem a essa condição, ordenada alfabeticamente.

Instruções Resumidas

  • Recuperar a coluna student_surname.
  • Agrupar os dados por student_surname.
  • Utilizar a cláusula HAVING para filtrar os resultados com base em COUNT(grade) > 1.
  • Ordenar os resultados por student_surname.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6
single

single

some-alt