Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Cláusula Having | Agrupamento
SQL Intermediário
Seção 1. Capítulo 6
single

single

bookClá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:

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

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

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

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:

  1. A cláusula WHERE é utilizada antes da agregação de dados, enquanto a cláusula HAVING é utilizada após a agregação de dados;
  2. A cláusula WHERE é escrita antes do GROUP BY, enquanto a cláusula HAVING é escrita após o GROUP 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.

Tarefa

Deslize para começar a programar

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 HAVING para filtrar os resultados com base em COUNT(grade) > 1.
  • Ordene os resultados por 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
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt