Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda HAVING | Agrupamento
SQL Intermediário
course content

Conteúdo do Curso

SQL Intermediário

SQL Intermediário

1. Agrupamento
2. Subconsultas Aninhadas
3. Juntando Tabelas
4. DDL e DML em SQL

book
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:

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. É 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:

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

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 coluna department.

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:

  1. A cláusula WHERE é usada antes da agregação dos dados, enquanto a cláusula HAVING é usada depois da agregação dos dados;
  2. A cláusula WHERE é escrita antes de GROUP BY, enquanto a cláusula HAVING é escrita depois de GROUP 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:

Tarefa

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 on COUNT(grade) > 1.
  • Sort the results by 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
toggle bottom row

book
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:

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. É 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:

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

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 coluna department.

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:

  1. A cláusula WHERE é usada antes da agregação dos dados, enquanto a cláusula HAVING é usada depois da agregação dos dados;
  2. A cláusula WHERE é escrita antes de GROUP BY, enquanto a cláusula HAVING é escrita depois de GROUP 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:

Tarefa

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 on COUNT(grade) > 1.
  • Sort the results by 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
Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
We're sorry to hear that something went wrong. What happened?
some-alt