single
Clá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 revisão interna adicional.
Pense em como você pode fazer isso. Você pode começar considerando que é possível realizar essa tarefa utilizando uma cláusula WHERE, e ela ficaria parecida com isto:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Mas, como você pode ver, ocorre um erro indicando que não é possível usar funções de agregação dentro de uma cláusula WHERE. É nesse caso que você precisará 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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
O resultado é um departamento na resposta utilizando a cláusula HAVING, onde uma condição é definida para a coluna utilizada na agregação dos dados.
Para utilizar agregação de dados dentro da cláusula HAVING, é necessário que haja agrupamento de dados na consulta. Como na consulta acima, os dados foram agrupados pela coluna department.
A seguir, uma sintaxe mais generalizada da cláusula HAVING e quando é mais indicada sua utilização:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Aqui está uma breve análise da principal diferença entre as cláusulas WHERE e HAVING e quando usar cada uma delas:
- A cláusula
WHEREé usada antes da agregação de dados, enquanto a cláusulaHAVINGé usada após a agregação de dados; - A cláusula
WHEREé escrita antes doGROUP BY, enquanto a cláusulaHAVINGé escrita após oGROUP BY.
Essas são as duas principais diferenças que você precisa lembrar para o uso correto da cláusula HAVING. Agora, retorne à tarefa dada pela escola.
Deslize para começar a programar
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 contenham 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, ordenados em ordem alfabética.
Instruções Resumidas
- Recuperar a coluna
student_surname. - Agrupar os dados por
student_surname. - Utilizar a cláusula
HAVINGpara filtrar os resultados com base emCOUNT(grade) > 1. - Ordenar os resultados por
student_surname.
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo