Perguntas de Entrevista SQL: 3 Exercícios de Triagem Técnica (Para Analistas de Dados)

Nos últimos 6 anos, fiz parte de muitas entrevistas de emprego – em ambos os lados da tabela. A parte mais divertida, mas também a mais temida, do processo é a triagem técnica. Neste artigo, vou mostrar três exercícios de teste SQL que, pela minha experiência, são bastante típicos em entrevistas de emprego de analistas de dados. (E hey, estas são perguntas de entrevista SQL “amostra” mas são fortemente baseadas na realidade!)

Antes das tarefas – O que você pode esperar em uma triagem técnica SQL?

Existem duas maneiras comuns de se fazer uma triagem técnica SQL.

A maneira mais simples mas menos comum é obter um computador, um conjunto de dados e uma tarefa. Enquanto você está resolvendo a tarefa, os entrevistadores estão observando e fazendo perguntas. Um pouco de tentativa e erro é totalmente bom, desde que você consiga encontrar a solução correta em um tempo razoável.

A outra forma, mais difícil (e, aliás, muito mais comum) é a entrevista no quadro branco. Neste caso, você não recebe um computador. Você tem que resolver a tarefa e esboçar o código em um quadro branco. Isto significa que você não receberá feedback (pelo menos não de um computador) sobre se você cometeu um erro lógico ou de sintaxe no seu código. Claro, você ainda pode resolver as tarefas pensando iterativamente (quebrando os diferentes problemas SQL um por um), mas você tem que estar muito confiante com suas habilidades SQL.

Adicionalmente, normalmente você tem que resolver as tarefas na hora. Talvez você tenha 3-5 minutos de tempo de reflexão, mas esse é o máximo que você pode esperar. A boa notícia é que, por causa disso, você terá tarefas relativamente mais simples. (Veja o nível de dificuldade abaixo!)

Nota: existem outros tipos de triagem técnica – como a tarefa take-home – onde você pode provar que também pode resolver desafios de codificação mais complexos.

Teste-te a ti mesmo!

Aqui estão três questões de entrevista SQL que estão muito próximas do que eu realmente recebi ou dei em entrevistas de trabalho de analista/cientista!
Tente resolver todas elas como se fossem entrevistas no quadro branco!
Na segunda metade do artigo, também lhe mostrarei as soluções!

Pergunta de entrevista SQL #1

Vamos dizer que você tem duas tabelas SQL: authors e books.
O conjunto de dados authors tem linhas de 1M+; aqui estão as primeiras seis linhas:

>

nome_do_autor nome_do_livro
autor_1 livro_1
autor_1 livro_2
autor_2 livro_3
autor_2 livro_4
autor_2 livro_5
autor_3 livro_6

O conjunto de dados books também tem linhas de 1M+ e aqui estão os primeiros seis:

nome_do_livro copias_vendidas
livro_1 1000
livro_2 1500
livro_3 34000
livro_4 29000
livro_5 40000
livro_6 4400

Criar uma consulta SQL que mostre os autores TOP 3 que venderam mais livros no total!

(Nota: Tenho uma pergunta SQL muito, muito semelhante para uma posição de cientista de dados numa empresa sueca muito conhecida.)

Pergunta de EntrevistaSQL #2

Você trabalha para uma inicialização que faz um software de apresentação online. Você tem um registro de eventos que registra cada vez que um usuário insere uma imagem em uma apresentação. (Um usuário pode inserir várias imagens.) A tabela event_log SQL tem este aspecto:

user_id event_date_time
7494212 1535308430
7494212 1535308433
1475185 1535308444
6946725 1535308475
6946725 1535308476
6946725 1535308477

…e tem mais de um bilião de filas.
Nota: Se o formato da coluna event_date_time não lhe parece familiar, vá ao Google “epoch timestamp”!

Escreva uma consulta SQL para saber quantos utilizadores inseriram mais de 1000 mas menos de 2000 imagens nas suas apresentações!

(Nota: Eu pessoalmente criei e usei esta pergunta de entrevista para testar analistas de dados quando eu era freelancer e meus clientes precisavam de ajuda em seu processo de contratação)

Pergunta de Entrevista SQL #3

Você tem duas tabelas SQL! A primeira chama-se employees e contém os nomes dos funcionários, os ids exclusivos dos funcionários e os nomes dos departamentos de uma empresa. Amostra:

nome_do_separtimento id_empregado nome_do_empregado
Vendas 123 John Doe
Vendas 211 Jane Smith
HR 556 Billy Bob
Vendas 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

A segunda chama-se salaries. Ela contém os mesmos nomes de empregados e os mesmos ids de empregados – e os salários de cada empregado. Amostra:

salário id_empregado nome_empregado
500 123 John Doe
600 211 Jane Smith
1000 556 Billy Bob
400 711 Robert Hayek
1200 235 Edward Jorgson
200 236 Christine Packard

A empresa tem 546 funcionários, portanto ambas as tabelas têm 546 linhas.

Imprimir cada departamento onde o salário médio por funcionário é inferior a $500!

(Nota: Eu criei esta pergunta teste baseado em uma pergunta real de entrevista SQL que eu ouvi de um amigo, que se candidatou em uma das maiores empresas de mídia social (o nome começa com ‘F.. ‘ :))

Solução da questão de entrevista SQL #1

O código da solução é:

SELECT authors.author_name, SUM(books.sold_copies) AS sold_sumFROM authorsJOIN booksON books.book_name = authors.book_nameGROUP BY authors.author_nameORDER BY sold_sum DESCLIMIT 3;

E aqui está uma breve explicação:

1. Primeiro você tem que iniciar o JOIN. Eu juntei as duas tabelas usando:

SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;

2. Depois disso, eu usei uma função SUM() com uma cláusula GROUP BY. Isto significa que na instrução SELECT tive que substituir a * pelas colunas author_name e sold_copies. (Não é obrigatório indicar de qual tabela você está selecionando as colunas, mas vale a pena. Por isso eu usei authors.author_name e books.sold_copies.)

3. Eventualmente, eu ORDERditei os resultados em DESCordem de finalização. (Só para minha conveniência, eu também renomeei a coluna sum para sold_sum usando o método AS sold_sum na instrução SELECT.)

Solução da Questão Entrevista SQL #2

A consulta SQL é:

SELECT COUNT(*) FROM (SELECT user_id, COUNT(event_date_time) AS image_per_user FROM event_log GROUP BY user_id) AS image_per_userWHERE image_per_user < 2000 AND image_per_user > 1000;

O truque nesta tarefa é que você teve que usar a função COUNT() duas vezes: primeiro, você teve que contar o número de imagens por usuário, depois o número de usuários (que preenchem a condição dada). A maneira mais fácil de fazer isso é usar uma subconsulta.

  1. Escreva primeiro a consulta interna! Execute uma simples função COUNT() com uma cláusula GROUP BY na event_log tabela.
  2. Crie um alias para a subconsulta (AS image_per_user). É um requisito de sintaxe em SQL.
  3. Eventualmente, numa consulta externa, aplique um filtro WHERE e uma função COUNT() sobre o resultado da subconsulta.

Solução da Questão Entrevista SQL #3

Solução:

SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;

Nota: Você também pode resolver esta tarefa usando uma subconsulta – mas em uma situação de entrevista o comitê irá gostar mais da solução acima.

Explicação do resultado da subconsulta:

1. Primeiro junte as duas tabelas:

SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id

Veja! Use a coluna employee_id – não a coluna employee_name. (Você sempre pode ter dois John Does em uma empresa, mas o id do funcionário é único!)

2. Depois use uma função AVG() com uma cláusula GROUP BY – e substitua a * com as colunas apropriadas. (Tal como na primeira tarefa.)

3. E o último passo é usar uma cláusula HAVING para filtrar pelo resultado da função AVG(). (Lembre-se: WHERE não é bom aqui porque seria iniciado antes da função AVG().)
Guardar: na linha HAVING, não pode referir-se ao alias – tem de usar toda a função em si!

Preparar para as projecções tecnológicas SQL praticando!

Se você conseguiu resolver todas essas questões corretamente, você provavelmente está pronto para uma triagem técnica SQL júnior ou mesmo para uma triagem técnica SQL de nível médio do Data Analyst.
Se não, deixe-me recomendar meu novo curso online: SQL for Aspiring Data Scientists (curso online de 7 dias) – onde você pode nivelar (ou aperfeiçoar) suas habilidades em SQL em apenas 7 dias. Quando você terminar o curso, basta voltar a este artigo e eu garanto que você será capaz de resolver estas questões!

SQL for Aspiring Data Scientists (curso online de 7 dias)

E se você está prestes a começar com SQL, comece com a minha série SQL For Data Analysis no blog!

Conclusion

A parte mais difícil destas questões de entrevista SQL é que elas são abstratas. As tarefas dizem para “imaginar os conjuntos de dados” e mostram apenas algumas linhas deles. Quando você recebe um exercício como esse, ajuda muito se você já viu conjuntos de dados semelhantes e resolveu problemas semelhantes antes. Espero que a resolução das tarefas deste artigo aumente a sua confiança!

Deixe uma resposta

O seu endereço de email não será publicado.