Conteúdo do Curso
SQL Intermediário
SQL Intermediário
HAVING
A escola está muito grata pelo seu trabalho e agora há uma nova tarefa para nós.
Verifica-se que alguns alunos fizeram exames adicionais quando deveriam fazer apenas um. A escola suspeita que eles tenham colado, pois cada aluno deveria ter apenas uma nota.
Fomos encarregados de obter os sobrenomes desses alunos e repassá-los à administração escolar para que tomem as medidas que considerarem 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:
SELECT 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 precisaremos da cláusula HAVING
.
Vamos entender o que é e como usá-la, usando um exemplo da nossa tabela employee
.
Digamos que precisamos recuperar os departamentos onde a média salarial dos funcionários é abaixo de $70.000 por ano.
Para alcançar isso, precisaremos usar uma função agregada e a cláusula HAVING
.
Vejamos como podemos fazer isso:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recebemos um departamento em resposta usando a cláusula HAVING
, onde estabelecemos uma condição para a coluna pela qual agrupamos os dados.
Nota
Para usar a agregação de dados dentro da cláusula
HAVING
, precisamos ter agrupamento de dados em nossa consulta. Como na consulta acima, agrupamos os dados pela colunadepartment
.
Vamos olhar para a sintaxe mais generalizada da cláusula HAVING
e quando é melhor usá-la:
Vamos também entender brevemente a 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 dos dados, enquanto a cláusulaHAVING
é usada depois da agregação dos dados; - A cláusula
WHERE
é escrita antes deGROUP BY
, enquanto a cláusulaHAVING
é escrita depois deGROUP BY
.
Estas são as duas principais diferenças que você precisa lembrar para o uso bem-sucedido da cláusula HAVING
. Agora, vamos voltar à tarefa que nos foi dada pela escola.
Aqui está a prévia de uma tabela student_grades
com a qual estamos trabalhando:
Swipe to start coding
Your task will be to fetch the last names of students who have multiple grades for the school.
You only need to retrieve the last names of the students; there's no need to include the count of their grades in the response. Use the HAVING
clause and the COUNT()
aggregate function to accomplish this task. Then, sort the surnames in the alphabetical order.
Note:
You should have only one column with last names in the result.
Brief Instructions
- Retrieve the
student_surname
column. - Group the data by
student_surname
. - Use the
HAVING
clause to filter the results based onCOUNT(grade) > 1
. - Sort the results by
student_surname
.
Solução
Obrigado pelo seu feedback!
HAVING
A escola está muito grata pelo seu trabalho e agora há uma nova tarefa para nós.
Verifica-se que alguns alunos fizeram exames adicionais quando deveriam fazer apenas um. A escola suspeita que eles tenham colado, pois cada aluno deveria ter apenas uma nota.
Fomos encarregados de obter os sobrenomes desses alunos e repassá-los à administração escolar para que tomem as medidas que considerarem 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:
SELECT 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 precisaremos da cláusula HAVING
.
Vamos entender o que é e como usá-la, usando um exemplo da nossa tabela employee
.
Digamos que precisamos recuperar os departamentos onde a média salarial dos funcionários é abaixo de $70.000 por ano.
Para alcançar isso, precisaremos usar uma função agregada e a cláusula HAVING
.
Vejamos como podemos fazer isso:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recebemos um departamento em resposta usando a cláusula HAVING
, onde estabelecemos uma condição para a coluna pela qual agrupamos os dados.
Nota
Para usar a agregação de dados dentro da cláusula
HAVING
, precisamos ter agrupamento de dados em nossa consulta. Como na consulta acima, agrupamos os dados pela colunadepartment
.
Vamos olhar para a sintaxe mais generalizada da cláusula HAVING
e quando é melhor usá-la:
Vamos também entender brevemente a 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 dos dados, enquanto a cláusulaHAVING
é usada depois da agregação dos dados; - A cláusula
WHERE
é escrita antes deGROUP BY
, enquanto a cláusulaHAVING
é escrita depois deGROUP BY
.
Estas são as duas principais diferenças que você precisa lembrar para o uso bem-sucedido da cláusula HAVING
. Agora, vamos voltar à tarefa que nos foi dada pela escola.
Aqui está a prévia de uma tabela student_grades
com a qual estamos trabalhando:
Swipe to start coding
Your task will be to fetch the last names of students who have multiple grades for the school.
You only need to retrieve the last names of the students; there's no need to include the count of their grades in the response. Use the HAVING
clause and the COUNT()
aggregate function to accomplish this task. Then, sort the surnames in the alphabetical order.
Note:
You should have only one column with last names in the result.
Brief Instructions
- Retrieve the
student_surname
column. - Group the data by
student_surname
. - Use the
HAVING
clause to filter the results based onCOUNT(grade) > 1
. - Sort the results by
student_surname
.
Solução
Obrigado pelo seu feedback!