Cláusula Having
A escola está muito agradecida pelo seu trabalho, e agora há uma nova tarefa para nós.
Acontece que alguns alunos fizeram provas adicionais quando deveriam ter feito apenas uma. A escola suspeita que eles possam ter trapaceado, pois cada aluno deveria ter apenas uma nota.
Nossa tarefa é obter os sobrenomes desses alunos e repassá-los à administração escolar para que tomem as medidas que julgarem necessárias.
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:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recebemos um departamento em resposta utilizando a cláusula HAVING, onde definimos uma condição para a coluna pela qual agrupamos os dados.
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 colunadepartment.
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:
- A cláusula
WHEREé utilizada antes da agregação de dados, enquanto a cláusulaHAVINGé utilizada 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, vamos retornar à tarefa proposta pela escola.
Swipe to start coding
Sua tarefa será buscar os sobrenomes dos estudantes que possuem múltiplas notas na escola.
Você só precisa recuperar os sobrenomes dos estudantes; não é necessário incluir a contagem de notas na resposta. Utilize a cláusula HAVING e a função agregadora COUNT() para realizar esta tarefa. Em seguida, ordene os sobrenomes em ordem alfabética.
Observação:
O resultado deve conter apenas uma coluna com os sobrenomes.
Instruções Resumidas
- Recupere a coluna
student_surname. - Agrupe os dados por
student_surname. - Utilize a cláusula
HAVINGpara filtrar os resultados com base emCOUNT(grade) > 1. - Ordene 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
Incrível!
Completion taxa melhorada para 4
Cláusula Having
Deslize para mostrar o menu
A escola está muito agradecida pelo seu trabalho, e agora há uma nova tarefa para nós.
Acontece que alguns alunos fizeram provas adicionais quando deveriam ter feito apenas uma. A escola suspeita que eles possam ter trapaceado, pois cada aluno deveria ter apenas uma nota.
Nossa tarefa é obter os sobrenomes desses alunos e repassá-los à administração escolar para que tomem as medidas que julgarem necessárias.
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:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
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:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recebemos um departamento em resposta utilizando a cláusula HAVING, onde definimos uma condição para a coluna pela qual agrupamos os dados.
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 colunadepartment.
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:
- A cláusula
WHEREé utilizada antes da agregação de dados, enquanto a cláusulaHAVINGé utilizada 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, vamos retornar à tarefa proposta pela escola.
Swipe to start coding
Sua tarefa será buscar os sobrenomes dos estudantes que possuem múltiplas notas na escola.
Você só precisa recuperar os sobrenomes dos estudantes; não é necessário incluir a contagem de notas na resposta. Utilize a cláusula HAVING e a função agregadora COUNT() para realizar esta tarefa. Em seguida, ordene os sobrenomes em ordem alfabética.
Observação:
O resultado deve conter apenas uma coluna com os sobrenomes.
Instruções Resumidas
- Recupere a coluna
student_surname. - Agrupe os dados por
student_surname. - Utilize a cláusula
HAVINGpara filtrar os resultados com base emCOUNT(grade) > 1. - Ordene os resultados por
student_surname.
Solução
Obrigado pelo seu feedback!
single