Perguntas da entrevista SQL para profissionais experientes

Nó Fonte: 1586233

Perguntas da entrevista SQL para profissionais experientes
 

Introdução

 
Se você é um cientista de dados experiente em busca de emprego, não poderia ter escolhido um momento melhor. A partir de agora, muitas organizações estabelecidas estão procurando por cientistas de dados que conheçam seu ofício por dentro e por fora. No entanto, a alta demanda não significa que você pode ou deve pular obstáculos e se candidatar a cargos seniores sem um certo conjunto de habilidades. Ao contratar cientistas de dados experientes, as empresas esperam que eles trabalhem nas tarefas mais difíceis. Esses funcionários devem ter uma boa compreensão até mesmo dos recursos mais obscuros para que possam usá-los quando necessário.

Não deve ser surpresa que, ao entrevistar para cargos seniores, cientistas de dados experientes tendam a receber perguntas muito mais difíceis. Muitas vezes, ao trabalhar em um único trabalho por alguns anos, os cientistas de dados se tornam muito habilidosos na execução de certas tarefas repetitivas. É essencial que os profissionais percebam que o SQL não para e termina com o conhecimento existente. Quando se trata de conceitos avançados de SQL, ainda pode haver algumas lacunas em seu conhecimento. Portanto, não faz mal obter ajuda para ter sucesso em sua entrevista de cientista de dados. 

SQL é a linguagem principal para gerenciar bancos de dados, portanto, realizar operações SQL está no centro dos trabalhos dos cientistas de dados. A maioria das entrevistas de cientistas de dados são organizadas para determinar o conhecimento de SQL de um candidato. 

O trabalho diário pode não incluir escrever consultas complexas, mas você deve mostrar que, se essas habilidades forem necessárias, você é a pessoa capaz de fazê-lo. Portanto, não deveria ser surpreendente que os entrevistadores perguntem a um conjunto diversificado de Perguntas da entrevista SQL para testar a fluência do candidato em SQL.

Neste artigo, queríamos resumir algumas das questões e conceitos complexos feitos em entrevistas com profissionais experientes. Mesmo se você estiver confiante em seu conhecimento de SQL, não faz mal verificar as palavras-chave e certificar-se de que tudo está coberto.

Conceitos mínimos para profissionais experientes

CASO / QUANDO

 
Compreender completamente o conceito de CASE (e a instrução When que o acompanha) é essencial para obter o domínio completo de SQL. Uma declaração de caso nos permite verificar certas condições e retornar um valor com base no fato de essas condições serem avaliadas como verdadeiras ou falsas. Em combinação com cláusulas, como WHERE e ORDER BY, CASE nos permite trazer lógica, condições e ordem para nossas consultas SQL.

O valor das instruções CASE não se limita a fornecer uma lógica condicional simples em nossas consultas. Cientistas de dados experientes devem ter mais do que uma compreensão superficial da instrução CASE e seus usos. Os entrevistadores provavelmente farão perguntas sobre diferentes tipos de expressões CASE e como escrevê-las. 

Candidatos experientes devem estar preparados para responder a questões teóricas, como explicar as diferenças entre declarações CASE Valorizadas e Pesquisadas, como elas funcionam e como escrevê-las. Isso requer uma forte compreensão de sua sintaxe e práticas comuns. Escusado será dizer que isso também inclui o uso adequado da cláusula ELSE.

Espera-se que os cientistas de dados experientes saibam como usar o CASE também com funções agregadas. Você também pode ser solicitado a escrever uma instrução CASE abreviada, que é menos repetitiva e mais fácil de entender. Você deve ser capaz de falar de forma inteligente sobre advertências e possíveis riscos de usar instruções CASE abreviadas.

Em geral, um cientista de dados experiente deve ser capaz de usar CASE para escrever consultas mais eficientes. Afinal, todo o propósito da instrução CASE é evitar escrever muitas consultas individuais para consolidar os dados.

Aqui está um exemplo da questão que pode ser resolvida usando instruções CASE / WHEN: https://platform.stratascratch.com/coding/9634-host-response-rates-with-cleaning-fees?python= 

Essa é uma pergunta difícil feita nas entrevistas do Airbnb, onde os candidatos precisam encontrar a taxa média de resposta do anfitrião, o CEP e sua taxa de limpeza correspondente.

Nesse caso, a instrução CASE/ WHEN é utilizada para formatar o resultado como um número e apresentá-lo como um valor percentual, além do CEP.

SQL junta

 
É fácil sentir-se confiante em seu conhecimento de SQL Joins, mas quanto mais você explorar este tópico, mais descobrirá que não sabe. Os entrevistadores costumam perguntar perguntas de entrevista sobre aspectos avançados de SQL Joins que muitas vezes passam despercebidos. Portanto, é importante mergulhar nesse conceito e dominá-lo completamente.
 
Além dos conceitos básicos, os entrevistadores podem perguntar o que são auto-junções cruzadas e descobrir a profundidade do seu conhecimento pedindo para resolver questões práticas. Você deve conhecer todos os diferentes tipos de junções, incluindo os tipos mais complexos, como junções de hash ou junções compostas. Você também pode ser solicitado a explicar o que são junções naturais e quando elas são mais úteis. Às vezes, você terá que explicar as diferenças entre as junções naturais e internas.
 
Você deve, em geral, ter uma experiência completa e domínio do uso de junções em combinação com outras instruções para obter os resultados desejados. Por exemplo, você deve saber como usar a cláusula WHERE para utilizar o Cross Join como se fosse um Inner Join. Você também deverá saber como usar junções para produzir novas tabelas sem colocar muita pressão no servidor. Ou como usar associações externas para identificar e preencher os valores ausentes ao consultar o banco de dados. Ou o funcionamento interno das junções externas, como o fato de que reorganizar sua ordem pode alterar a saída. 

Aqui está um exemplo da pergunta que envolve escrever uma declaração conjunta interna

Essa é uma pergunta bastante difícil, em que os candidatos são solicitados a exibir o tamanho do pedido como uma porcentagem do gasto total.
 
 

Conceito avançado N1: Manipulação de data e hora

 
Perguntas da entrevista SQL para profissionais experientes
 

É comum que os bancos de dados incluam datas e horas, portanto, qualquer cientista de dados experiente deve ter profundo conhecimento de como trabalhar com eles. Esse tipo de dados nos permite rastrear a ordem em que os eventos ocorrem, mudanças na frequência, calcular intervalos e obter outros insights importantes. Muitas vezes, realizar essas operações requer um domínio completo da manipulação de data e hora no SQL. Assim, os profissionais com esse conjunto de habilidades terão uma vantagem sobre os candidatos concorrentes. Se você não está 100% confiante em suas habilidades, examine os conceitos descritos abaixo e veja quantos deles parecem familiares.

Como existem muitas abordagens diferentes (mas válidas) para formatar dados em SQL, os grandes codificadores devem pelo menos estar familiarizados com todas elas. Durante as entrevistas, os gerentes de contratação esperam o conhecimento dos conceitos básicos de formatação de dados e a capacidade de falar de forma inteligente sobre a escolha da função certa para a tarefa. Isso inclui o conhecimento de uma importante função FORMAT() e a sintaxe associada para fazer uso completo da função. O conhecimento de outras funções básicas, como NOW() também é esperado. Além disso, não seria do nada que profissionais experientes fossem questionados sobre conceitos básicos como dados de séries temporais e sua finalidade.

Também é importante considerar o contexto do trabalho para o qual você está se candidatando. Uma empresa de IA ou IoT estaria mais preocupada em rastrear dados coletados dos sensores, enquanto um aplicativo de negociação de ações pode exigir que você acompanhe as flutuações de preços durante o dia, semana ou mês.

Em alguns casos, os empregadores podem perguntar sobre funções de data/hora mais avançadas no SQL, como CAST(), EXTRACT() ou DATE_TRUNC(). Essas funções podem ser inestimáveis ​​quando você está trabalhando com um grande volume de dados que contém datas. Um cientista de dados experiente deve conhecer o propósito de cada função e suas aplicações. Em um cenário ideal, ele ou ela deve ter experiência de usá-los no passado.

A manipulação de data e hora mais complexa no SQL envolverá a combinação de funções básicas e avançadas. Portanto, é necessário conhecê-los todos, começando pelos mais básicos FORMAT(), NOW(),CURRENT_DATE e CURRENT_TIME, e incluindo as funções mais avançadas mencionadas acima. Como um cientista de dados experiente, você também deve saber o que o INTERVAL faz e quando usá-lo.

Aqui está um exemplo de uma pergunta feita em entrevistas do Airbnb, onde os candidatos devem usar os dados disponíveis para acompanhar o crescimento do Airbnb.
 
 

A premissa:

 
Nesta pergunta, os candidatos são solicitados a acompanhar o crescimento do Airbnb com base nas mudanças no número de anfitriões inscritos a cada ano. Em outras palavras, usaremos o número de hosts recém-registrados como indicador de crescimento para cada ano. Encontraremos a taxa de crescimento calculando a diferença no número de hosts entre o ano passado e o atual e dividindo esse número pelo número de hosts registrados durante o ano anterior. Em seguida, encontraremos o valor percentual multiplicando o resultado por 100.

A tabela de saída deve ter colunas e os dados correspondentes para o número de hosts no ano atual, no ano anterior e o percentual de crescimento de ano para ano. A porcentagem deve ser arredondada para o número inteiro mais próximo e as linhas devem ser ordenadas em ordem crescente, dependendo do ano.
 
 

Alternativa?

 
Para responder a esta pergunta, o candidato deve trabalhar com a tabela chamada 'airbnb_search_details', que inclui muitas colunas. A coluna que precisamos é rotulada como 'host_since', que denota o ano, mês e dia em que o host se inscreveu no site. Para este exercício, o mês e o dia são irrelevantes, então a primeira coisa que precisamos fazer é extrair o ano do valor. Em seguida, teremos que criar uma exibição que inclua colunas separadas para o ano atual, ano anterior e o número total de hosts nesse ano. 

Selecione extrair(ano FROM host_since::DATE) FROM airbnb_search_details WHERE host_since NÃO É NULO

Até agora, fizemos duas coisas:

  1. Nós nos certificamos de incluir apenas as linhas em que a coluna host_since não está vazia.
  2. Extraímos o ano dos dados e o lançamos como o valor DATE.
Selecione extract(year FROM host_since::DATE) count(id) como current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY ano asc

Em seguida, contamos os ids e configuramos a cláusula GROUP BY para cada ano. E faça com que seja exibido em ordem crescente. 

Isso deve nos dar uma tabela com duas colunas: o ano e o número de hosts registrados naquele ano. Ainda não temos uma imagem completa necessária para resolver a questão, mas é um passo na direção certa. Também precisamos de colunas separadas para hosts inscritos no ano anterior. É aqui que entra a função LAG().

SELECT Year, current_year_host, LAG(current_year_host, 1) OVER (ORDER BY year) as prev_year_host Selecione extract(year FROM host_since::DATE) count(id) as current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since: :DATA) ORDENAR POR ano asc

Aqui, adicionamos a terceira coluna, que será rotulada como 'prev_year_host' e seus valores virão de 'current_year_host', exceto pelo atraso de uma linha. Veja como isso pode parecer:

Perguntas da entrevista SQL para profissionais experientes
 

Organizar a tabela dessa maneira torna muito conveniente calcular a taxa de crescimento final. Temos uma coluna separada para cada valor na equação. Por fim, nosso código deve ficar assim:

SELECT ano, ano_anterior_host, ano_anterior_host, round(((ano_atual_host - ano_anterior_host)/(cast(ano_anterior_host AS numérico)))*100) crescimento_estimado FROM (SELECT ano, ano_anterior_host, LAG(ano_atual_host, 1) OVER (ORDER BY ano) AS prev_year_host FROM (SELECT extract(ano FROM host_since::date) AS ano, contagem(id) current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(ano FROM host_since::date) ORDER BY ano) t1) t2

Aqui, adicionamos outra consulta e outra coluna onde calculamos a taxa de crescimento. Devemos multiplicar o resultado inicial por 100 e arredondá-lo para satisfazer os requisitos da tarefa. 

Essa é a solução para esta tarefa. Fica claro que as funções de manipulação de data e hora foram essenciais para completar a tarefa. 
 
 

Conceito Avançado N2: Funções e Partições de Janelas

 
Perguntas da entrevista SQL para profissionais experientes
 

Funções da janela SQL são um dos conceitos mais importantes para escrever consultas SQL complexas, porém eficientes. Espera-se que os profissionais experientes tenham um profundo conhecimento prático e teórico das funções das janelas. Isso inclui saber o que é a cláusula over e dominar seu uso. Os entrevistadores podem perguntar como a cláusula OVER pode transformar funções agregadas em funções de janela. Você também pode ser questionado sobre as três funções agregadas que podem ser usadas como funções de janela. Cientistas de dados experientes também devem estar cientes de outras funções de janela não agregadas.

Para fazer o melhor uso das funções da janela, é preciso também saber o que é a cláusula PARTITION BY e como usá-la. Você pode ser solicitado a explicá-lo e fornecer exemplos de alguns casos de uso. Às vezes você terá que organizar linhas dentro de partições usando a cláusula ORDER_BY.

Os candidatos que puderem demonstrar um conhecimento profundo de cada função de janela individual, como ROW_NUMBER(), terão uma vantagem. Escusado será dizer que o conhecimento teórico por si só não é suficiente – os profissionais também devem ter experiência de usá-los na prática, com ou sem divisórias. Por exemplo, um profissional experiente deve ser capaz de explicar as diferenças entre RANK() e DENSE_RANK(). Um candidato ideal deve conhecer alguns dos conceitos mais avançados, como quadros dentro de partições, e ser capaz de explicá-los com clareza.

Grandes candidatos também devem explicar o uso da função NTH_VALUE(). Não faria mal mencionar as alternativas para esta função, como as funções FIRST_VALUE() e LAST_VALUE(). As empresas geralmente gostam de medir quartis, quantis e percentis em geral. Para realizar essa operação, os cientistas de dados também devem saber usar a função de janela NTILE().

Em SQL, geralmente há muitas maneiras de abordar uma tarefa. Ainda assim, as funções de janela fornecem a maneira mais fácil de executar operações comuns, mas complexas. Um bom exemplo de uma função de janela é LAG() ou LEAD(), então você também deve estar familiarizado com elas. Por exemplo, vejamos um exemplo da solução anterior para uma pergunta difícil da entrevista do Airbnb:

Para exibir o número de hosts no ano anterior, usamos a função LAG() com a instrução OVER. Isso poderia ter sido feito de muitas outras maneiras, mas as funções de janela nos permitiram obter o resultado desejado em apenas uma linha de código SQL:

LAG(atual_ano_host, 1) OVER (ORDER BY ano) como prev_year_host

Muitas empresas precisam calcular o crescimento ao longo de um determinado período de tempo. A função LAG() pode ser inestimável para completar tais atribuições.
 
 

Conceito Avançado N3: Crescimento Mês Sobre Mês

 
Perguntas da entrevista SQL para profissionais experientes
 

Muitas organizações usam a análise de dados para medir seu próprio desempenho. Isso pode envolver medir a eficácia das campanhas de marketing ou o ROI de um investimento específico. Realizar essa análise requer um conhecimento profundo de SQL, como funções de data, hora e janela.

Os cientistas de dados também terão que provar suas habilidades em formatar os dados e exibi-los como porcentagens ou de qualquer outra forma. Em geral, para resolver as questões práticas em que você precisa calcular o crescimento mês a mês, você deve usar a combinação de vários conjuntos de habilidades. Alguns dos conceitos necessários serão avançados (funções de janela, manipulação de data e hora), enquanto outros serão básicos (funções agregadas e instruções SQL comuns).

Vejamos um exemplo de pergunta feita por entrevistadores da Amazon.

A premissa:

 
Nessa questão, temos que trabalhar com uma tabela de compras e calcular o crescimento mensal ou queda na receita. O resultado final deve ser formatado de forma específica (formato AAAA-MM) e as porcentagens devem ser arredondadas para a segunda casa decimal mais próxima. 

Alternativa?

 
Ao trabalhar em uma tarefa como essa, a primeira coisa que você precisa fazer é entender a tabela. Você também deve identificar as colunas com as quais precisa trabalhar para responder à pergunta. E como será sua saída.

Em nosso exemplo, os valores de dados têm o tipo de objeto, então teremos que usar a função CAST () para transformá-los em tipos de data.

SELECT to_char(cast(created_at como data), 'AAAA-MM') FROM sf_transactions

A questão também especifica um formato para datas, então podemos usar a função TO_CHAR() no SQL para gerar a data neste formato.

Para calcular o crescimento, também devemos selecionar a função de agregação created_at e SUM() para obter o volume de vendas totais para essa data. 

SELECT to_char(cast(created_at como data), 'AAAA-MM'), criado_at, soma(valor) FROM sf_transactions

Neste ponto, temos que usar as funções da janela novamente. Especificamente, vamos usar a função LAG() para acessar o volume do mês passado e exibi-lo como uma coluna separada. Para isso, também precisaremos de uma cláusula OVER.

SELECT to_char(cast(created_at como data), 'AAAA-MM') AS ano_mês, criado_em, soma(valor) lag(soma(valor), 1) OVER (ORDER BY criado_em::data) FROM sf_transactions GROUP BY criado_em

Com base no código que escrevemos até agora, nossa tabela ficará assim:

Perguntas da entrevista SQL para profissionais experientes
 

Aqui, temos as datas e os valores totais correspondentes na coluna de soma e os valores da última data na coluna de atraso. Agora podemos inserir os valores na fórmula e exibir a taxa de crescimento em uma coluna separada.

Também devemos remover a coluna created_at desnecessária e alterar as cláusulas GROUP BY e ORDER BY para ano_mês.

SELECT to_char(cast(created_at as date), 'YYYY-MM') AS year_month, sum(value), lag(sum(value), 1) OVER (ORDER BY to_char(cast(created_at as date)) FROM sf_transactions GROUP BY ano mês

Depois de executar o código, nossa tabela deve incluir apenas as colunas essenciais para nosso cálculo.

Perguntas da entrevista SQL para profissionais experientes
 

Agora podemos finalmente chegar à solução. Veja como ficaria o código final:

SELECT to_char(created_at::date, 'YYYY-MM') AS ano_mês, round(((soma(valor) - lag(soma(valor), 1) OVER w) / (lag(soma(valor), 1) OVER w)) * 100, 2) AS Revenue_diff_pct FROM sf_transactions GROUP BY ano_mês WINDOW w AS ( ORDER BY to_char(created_at::date, 'YYYY-MM')) ORDER BY ano_mês ASC


 

Neste código, pegamos dois valores de coluna do exemplo anterior e calculamos a diferença entre eles. Observe que também usamos aliases de janela para reduzir a repetitividade do nosso código.

Então, de acordo com o algoritmo, dividimos pela receita do mês atual e multiplicamos por 100 para obter o valor percentual. Finalmente, arredondamos o valor percentual para duas casas decimais. Chegamos à resposta que satisfaz todos os requisitos da tarefa. 

Conceito Avançado N4: Taxas de Churn

 
Embora seja o oposto do crescimento, o churn também é uma métrica importante. Muitas empresas acompanham suas taxas de churn, especialmente se seu modelo de negócios for baseado em assinatura. Dessa forma, eles podem rastrear o número de assinaturas ou contas perdidas e prever os motivos que o causaram. Espera-se que um cientista de dados experiente saiba quais funções, declarações e cláusulas usar para calcular as taxas de churn.

Os dados de assinatura são muito particulares e contêm informações privadas do usuário. Também é importante que os cientistas de dados saibam como trabalhar com esses dados sem expô-los. Muitas vezes, o cálculo das taxas de cancelamento envolve expressões de tabela comuns, que são um conceito relativamente novo. Os melhores cientistas de dados devem saber por que os CTEs são úteis e quando usá-los. Ao trabalhar com bancos de dados mais antigos, onde os CTEs não estão disponíveis, um candidato ideal ainda deve ser capaz de realizar o trabalho.

Aqui está um exemplo de uma tarefa difícil. Os candidatos entrevistados na Lyft recebem esta tarefa para calcular a taxa de rotatividade dos motoristas na empresa.

Para resolver esse problema, os cientistas de dados devem usar instruções case/when, funções de janela como LAG(), bem como FROM/WHERE e outras cláusulas básicas. 

Conclusão

 
Trabalhar como cientista de dados por muitos anos certamente parece impressionante em um currículo e lhe renderá muitas entrevistas. No entanto, depois de colocar o pé na porta, você ainda precisa exibir o conhecimento para complementar anos de experiência. Mesmo que você tenha uma vasta experiência em escrevendo consultas em SQL, não custa nada usar recursos como StrataScratchGenericName para atualizar seus conhecimentos.

 
 
Nate Rosidi é cientista de dados e em estratégia de produto. Ele também é professor adjunto ensinando análise e é o fundador da StrataScratchGenericName, uma plataforma que ajuda os cientistas de dados a se prepararem para suas entrevistas com perguntas reais das principais empresas. Conecte-se com ele em Twitter: StrataScratch or LinkedIn.

Fonte: https://www.kdnuggets.com/2022/01/sql-interview-questions-experienced-professionals.html

Carimbo de hora:

Mais de KDnuggetsGenericName