Voltar para a lista de artigos Artigos
8 minutos de leitura

As 9 principais perguntas da entrevista sobre SQL GROUP BY

Está se preparando para uma entrevista de emprego em SQL? Este guia o guiará por nove perguntas básicas, intermediárias e avançadas sobre GROUP BY que você talvez tenha de responder.

Há perguntas GROUP BY comuns que aparecem em muitas entrevistas de emprego de SQL; neste artigo, explicaremos como respondê-las. Se você é um analista de dados ou outro profissional de dados que está se preparando para uma entrevista, este artigo tem o objetivo de ajudá-lo. É claro que qualquer pessoa interessada em SQL e na cláusula GROUP BY também pode ler essas perguntas. Você provavelmente aprenderá algo novo e interessante sobre essa cláusula popular.

Este artigo está dividido em duas seções: perguntas básicas e perguntas intermediárias/avançadas. Essa abordagem gradual também reflete nossos cursos que abordam a cláusula GROUP BY, inclusive nosso cursoSQL para Iniciantes . Em 129 exercícios interativos, ele apresenta tópicos básicos importantes de SQL, como GROUP BY, JOINs, WHERE e operações de conjunto (UNION, INTERSECT, EXCEPT).

As nuances intermediárias e avançadas do GROUP BY são abordadas em nosso cursoComo Criar Relatórios Básicos em SQL . Aqui você aprenderá a agregar dados, usar a instrução CASE WHEN, criar métricas, proporções e comparações de dados mais complexas e trabalhar com CTEs (Common Table Expressions). Se quiser saber mais, dê uma olhada neste artigo sobre o curso Como Criar Relatórios Básicos em SQL .

Vamos dar início a essa visão geral com algumas perguntas básicas para entrevistas!

Perguntas básicas da entrevista sobre GROUP BY

1: O que significa GROUP BY faz?

A cláusula GROUP BY do SQL organiza a saída da consulta em grupos, sendo que todas as linhas com o mesmo valor em uma determinada coluna pertencem a um grupo. Por exemplo, se você tiver uma tabela que armazena dados de funcionários, poderá contar os funcionários por departamento ou encontrar o salário médio de cada departamento. O GROUP BY geralmente é usado com as funções de agregação, como COUNT(), SUM(), AVG(), MIN(), MAX().

Você pode encontrar uma visão geral mais detalhada de GROUP BY em nosso artigo How Does SQL GROUP BY Work?

2: Use a tabela movie_streaming para escrever três consultas.

É comum o entrevistador pedir ao candidato que escreva uma consulta usando a cláusula GROUP BY. Demonstraremos três exemplos que apresentam tópicos comuns de GROUP BY.

A tabela movie_streaming contém estatísticas sobre quantas vezes um filme foi transmitido em cada dia.

iddatemoviedirectornumber_of_streams
12022-04-01FargoCoen brothers495
22022-04-01The Big LebowskiCoen brothers512
32022-04-01No Country for Old MenCoen brothers270
42022-04-01DogtoothYorgos Lanthimos157
52022-04-01The LobsterYorgos Lanthimos247
62022-04-01The Killing of a Sacred DeerYorgos Lanthimos320
72022-04-02FargoCoen brothers321
82022-04-02The Big LebowskiCoen brothers905
92022-04-02No Country for Old MenCoen brothers308
102022-04-02DogtoothYorgos Lanthimos233
112022-04-02The LobsterYorgos Lanthimos405
122022-04-02The Killing of a Sacred DeerYorgos Lanthimos109

2a: Encontre o número total de transmissões por data.

Essa pergunta pede que você agrupe os dados por apenas uma coluna:

SELECT date,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date;

O código de saída será:

datetotal_number_of_streams
2022-04-012,001
2022-04-022,281

O agrupamento é feito na coluna data, e a função de agregação SUM() é usada para obter o número de fluxos por data.

2b: Encontre o número total de fluxos em date e director.

Para obter uma resposta a essa pergunta, os dados precisam ser agrupados por duas colunas. Para fazer isso, as colunas date e director devem ser indicadas em GROUP BY e separadas por vírgula.

SELECT date,
	 director,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date, director;

É isso que o código retornará:

datedirectortotal_number_of_streams
2022-04-01Yorgos Lanthimos724
2022-04-02Coen brothers1,534
2022-04-02Yorgos Lanthimos747
2022-04-01Coen brothers1,277

2c: Encontre o número total de fluxos por data e diretor. Mostrar somente as datas com um número total de fluxos acima de 740.

SELECT date,
	 director,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date, director
HAVING SUM(number_of_streams) > 740;

Os dados são novamente agrupados pelas colunas date e director. A cláusula HAVING e a função SUM() são usadas para mostrar somente o total de fluxos acima de 740. (SUM() soma o número de transmissões diárias; HAVING filtra as transmissões que não atingem a quantidade mínima).

A execução da consulta retornará:

datedirectortotal_number_of_streams
2022-04-02Coen brothers1,534
2022-04-02Yorgos Lanthimos747
2022-04-01Coen brothers1,277

Você pode encontrar mais detalhes sobre esses conceitos neste artigo que explica como funciona o GROUP BY.

3: Como você filtra grupos em uma consulta SQL?

Os grupos em uma consulta SQL são filtrados usando a cláusula HAVING. HAVING não pode ser usada sem GROUP BY; ela é sempre escrita após GROUP BY, e sua finalidade é filtrar os dados resultantes de uma função agregada - por exemplo, encontrar grupos com a contagem maior que um número especificado etc.

É importante observar que a cláusula WHERE também é usada para filtragem em uma consulta SQL. Enquanto HAVING é usada para filtrar grupos, WHERE filtra linhas. Em outras palavras, WHERE filtra os dados antes de serem agregados.

4: Qual é a diferença entre WHERE e HAVING em SQL?

Tanto o WHERE quanto o HAVING são usados para filtrar dados em uma consulta SQL. A principal diferença é que WHERE é usado em valores não agregados, enquanto HAVING é usado em valores agregados. A ordem de execução é a seguinte: WHERE - GROUP BY - HAVING. Isso também significa que WHERE é escrito antes de GROUP BY, enquanto HAVING vem depois de GROUP BY.

Na prática, o WHERE filtra os dados primeiro. Esses dados filtrados serão agrupados e agregados e, em seguida, HAVING filtrará os dados agrupados e agregados.

Por exemplo, você usaria o WHERE para filtrar somente os usuários que estão empregados há mais de um ano. Em seguida, você pode calcular o salário médio dos funcionários com mais de um ano de experiência por departamento. Por fim, você pode mostrar somente os departamentos com um salário médio acima de um valor específico usando a cláusula HAVING. Dessa forma, você filtra as linhas antes e depois da função de agregação. Consulte este artigo para obter uma explicação detalhada das diferenças entre WHERE e HAVING .

Perguntas intermediárias e avançadas da entrevista sobre GROUP BY

5: Quais funções podem ser usadas com GROUP BY?

A cláusula GROUP BY é normalmente usada com as funções de agregação do SQL. Essas funções obtêm valores de linhas individuais, realizam um cálculo e retornam um único valor. Algumas das funções de agregação mais usadas são:

  • SUM() - Soma todos os valores das linhas.
  • COUNT() - Contam o número de linhas.
  • AVG() - Retorna o valor médio.
  • MIN() - Retorna o menor valor.
  • MAX() - Retorna o maior valor.

6: Qual é a diferença entre COUNT(*), COUNT(expression) e COUNT(DISTINCT expression)?

COUNT(*) retorna o número de linhas, incluindo linhas duplicadas e linhas com valores NULL.

Isso é diferente de COUNT(expression), que retorna apenas o número de linhas com valores que não sejamNULL. Ele também conta as linhas com valores duplicados.

Se você adicionar a palavra-chave DISTINCT, todas as linhas duplicadas serão ignoradas, assim como as linhas com valores NULL. Dessa forma, você obtém o número de linhas únicas ou distintas.

Este artigo sobre os três usos da função COUNT() explica as diferenças em mais detalhes.

7: O que acontece com NULLs quando você usa GROUP BY?

A cláusula GROUP BY não ignora os valores NULL. Portanto, se você usá-la e houver valores NULL na coluna, todas as linhas com valores da coluna NULL serão tratadas como um grupo.

Como isso funciona na prática? Aqui está uma explicação mais detalhada de GROUP BY e NULLs, juntamente com exemplos práticos.

8: O que esse código retornará?

SELECT department,
       month,
 AVG(salary) AS average_salary
FROM salaries
GROUP BY department;

Esse código gera um erro porque a coluna month não está escrita em GROUP BY. O erro ocorre porque todas as colunas que aparecem na instrução SELECT devem aparecer em GROUP BY. Esse erro "not a GROUP BY expression" precisa ser corrigido.

Para que o código funcione, ele deve ser escrito assim:

SELECT department,
       month,
 	 AVG(salary) AS average_salary
FROM salaries
GROUP BY department, month;

Agora, essa consulta produzirá o salário médio por mês e por departamento.

Entretanto, todas as colunas que aparecem na cláusula GROUP BY não precisam aparecer na instrução SELECT. Portanto, o código acima poderia ter a seguinte aparência e ainda assim não retornar um erro:

SELECT department,
 	 AVG(salary) AS average_salary
FROM salaries
GROUP BY department, month;

Embora esse código funcione e retorne os valores médios corretos, o fato de não mostrar as informações do mês significa que será impossível decifrar qual salário médio está relacionado a qual mês.

9: O que são GROUP BY extensões? O que são extensões GROUP BY você conhece?

GROUP BY As extensões GROUP BY ampliam as possibilidades da cláusula GROUP BY, permitindo a criação de relatórios mais complexos por meio de um agrupamento de dados mais sofisticado.

Essas extensões são ROLLUP, CUBE e GROUPING SETS. A extensão ROLLUP é usada com mais frequência no cálculo de subtotais em dados hierárquicos. Ela assumirá a relação hierárquica entre os dados, criando subtotais para cada nível e o total geral.

A extensão CUBE é semelhante, mas cria todas as combinações possíveis de dados e retorna seus subtotais e um total geral.

A terceira extensão é GROUPING SETS. Ela permite escrever as várias cláusulas GROUP BY em uma única cláusula GROUP BY. Isso vem de uma definição de um conjunto de agrupamento, que é um grupo de colunas pelas quais você deseja agrupar os dados.

Para ver como essas extensões funcionam na prática, você deve ver o que o curso GROUP BY Extensions oferece.

Prepare-se para sua entrevista de emprego em SQL!

Esta foi uma visão geral das perguntas mais comuns das entrevistas de SQL com foco na cláusula GROUP BY.

GROUP BY é um conceito importante. Sem usá-lo como se fosse sua segunda natureza, você não conseguirá impressionar na entrevista de emprego. Este artigo lhe deu uma boa noção do que você pode esperar.

Mas não basta apenas conhecer os conceitos. Você também precisa praticar, e prática significa escrever muito código usando o GROUP BY. Our SQL para Iniciantes e Como Criar Relatórios Básicos em SQL darão a você uma oportunidade estruturada para fazer exatamente isso!