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 estejam colando, pois cada aluno deveria ter apenas uma nota.
Nossa tarefa é obter os sobrenomes desses alunos e repassá-los para a administração da escola, 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 mais ou menos 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
. É aqui 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 apropriado 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ê deve lembrar para utilizar a cláusula HAVING
com sucesso. 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
. - Use a cláusula
HAVING
para 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
Awesome!
Completion rate improved to 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 estejam colando, pois cada aluno deveria ter apenas uma nota.
Nossa tarefa é obter os sobrenomes desses alunos e repassá-los para a administração da escola, 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 mais ou menos 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
. É aqui 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 apropriado 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ê deve lembrar para utilizar a cláusula HAVING
com sucesso. 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
. - Use a cláusula
HAVING
para filtrar os resultados com base emCOUNT(grade) > 1
. - Ordene os resultados por
student_surname
.
Solução
Obrigado pelo seu feedback!
Awesome!
Completion rate improved to 4single