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 ORDER
ditei os resultados em DESC
ordem 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.
- Escreva primeiro a consulta interna! Execute uma simples função
COUNT()
com uma cláusulaGROUP BY
naevent_log
tabela. - Crie um alias para a subconsulta (
AS image_per_user
). É um requisito de sintaxe em SQL. - Eventualmente, numa consulta externa, aplique um filtro
WHERE
e uma funçãoCOUNT()
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!