숙련된 전문가를 위한 SQL 면접 질문

소스 노드 : 1586233

숙련된 전문가를 위한 SQL 면접 질문
 

개요

 
직업을 찾고 있는 숙련된 데이터 과학자라면 이보다 더 좋은 시간을 선택할 수 없었을 것입니다. 현재 많은 기존 조직에서 자신의 기술을 안팎으로 알고 있는 데이터 과학자를 찾고 있습니다. 그러나 수요가 높다고 해서 특정 기술 없이 고위직에 지원할 수 있거나 해야 한다는 의미는 아닙니다. 숙련된 데이터 과학자를 고용할 때 기업은 가장 어려운 작업을 수행할 것으로 기대합니다. 이러한 직원은 가장 모호한 기능도 필요할 때 사용할 수 있도록 잘 파악해야 합니다.

고위 직책을 인터뷰할 때 숙련된 데이터 과학자가 훨씬 더 어려운 질문을 받는 경향이 있다는 것은 놀라운 일이 아닙니다. 종종 데이터 과학자는 몇 년 동안 단일 작업을 수행할 때 특정 반복 작업을 수행하는 데 매우 능숙해집니다. 전문가는 SQL이 기존 지식으로 끝나지 않는다는 것을 깨닫는 것이 중요합니다. 고급 SQL 개념에 관해서는 여전히 지식에 약간의 격차가 있을 수 있습니다. 따라서 데이터 과학자 인터뷰에서 성공하는 데 도움이 되는 것은 나쁘지 않습니다. 

SQL은 데이터베이스 관리를 위한 기본 언어이므로 SQL 작업을 수행하는 것은 데이터 과학자의 작업의 핵심입니다. 대부분의 데이터 과학자 인터뷰는 SQL에 대한 후보자의 지식을 결정하기 위해 이루어집니다. 

일상 업무에는 복잡한 쿼리 작성이 포함되지 않을 수 있지만 그러한 기술이 필요한 경우 해당 작업을 수행할 수 있는 사람임을 보여야 합니다. 따라서 면접관이 다양한 질문을 하는 것은 놀라운 일이 아닙니다. SQL 면접 질문 SQL에서 후보자의 유창함을 테스트합니다.

이 기사에서 우리는 경험 많은 전문가와의 인터뷰에서 제기된 복잡한 질문과 개념을 요약하고 싶었습니다. SQL 지식에 자신이 있더라도 키워드를 스캔하고 모든 내용이 포함되어 있는지 확인하는 것은 나쁘지 않습니다.

숙련된 전문가를 위한 최소한의 개념

사례 / 언제

 
CASE(및 수반되는 When 문)의 개념을 완전히 이해하는 것은 SQL을 완전히 숙달하는 데 필수적입니다. case 문을 사용하면 특정 조건을 확인하고 해당 조건이 true 또는 false로 평가되는지 여부에 따라 값을 반환할 수 있습니다. WHERE 및 ORDER BY와 같은 절과 함께 CASE를 사용하면 논리, 조건 및 순서를 SQL 쿼리에 가져올 수 있습니다.

CASE 문의 가치는 쿼리에 간단한 조건부 논리를 제공하는 데 국한되지 않습니다. 숙련된 데이터 과학자는 CASE 문과 그 용도에 대해 표면 수준 이상의 이해를 갖고 있어야 합니다. 면접관은 다양한 유형의 CASE 표현과 작성 방법에 대해 질문할 것입니다. 

경험이 풍부한 후보자는 Valued 및 Searched CASE 문의 차이점, 작동 방식 및 작성 방법과 같은 이론적 질문에 답할 준비가 되어 있어야 합니다. 이를 위해서는 구문과 일반적인 관행에 대한 강력한 이해가 필요합니다. 말할 필요도 없이 여기에는 ELSE 절의 적절한 사용도 포함됩니다.

숙련된 데이터 과학자는 CASE를 집계 함수와 함께 사용하는 방법도 알고 있어야 합니다. 덜 반복적이고 이해하기 쉬운 약식 CASE 문을 작성하라는 요청을 받을 수도 있습니다. 약식 CASE 문 사용의 경고 및 가능한 위험에 대해 지능적으로 이야기할 수 있어야 합니다.

일반적으로 숙련된 데이터 과학자는 CASE를 사용하여 보다 효율적인 쿼리를 작성할 수 있어야 합니다. 결국 CASE 문의 전체 목적은 데이터를 통합하기 위해 너무 많은 개별 쿼리를 작성하지 않도록 하는 것입니다.

다음은 CASE / WHEN 문을 사용하여 해결할 수 있는 질문의 예입니다. https://platform.stratascratch.com/coding/9634-host-response-rates-with-cleaning-fees?python= 

이것은 후보자가 평균 호스트 응답률, 우편 번호 및 해당 청소 비용을 찾아야 하는 에어비앤비 인터뷰에서 묻는 어려운 질문입니다.

이 경우 CASE/WHEN 문을 사용하여 결과의 ​​형식을 숫자로 지정하고 이를 우편번호 외에 백분율 값으로 표시합니다.

SQL 조인

 
SQL 조인에 대한 지식에 자신감을 느끼기는 쉽지만 이 주제를 더 많이 탐색할수록 자신이 모르는 것을 더 많이 발견하게 될 것입니다. 면접관들이 종종 묻는다. SQL 조인의 고급 측면에 대한 인터뷰 질문 종종 간과되는 것입니다. 따라서 이 개념을 자세히 살펴보고 완전히 숙달하는 것이 중요합니다.
 
기본 개념 외에도 면접관은 자체 교차 조인이 무엇인지 묻고 실용적인 질문을 통해 지식의 깊이를 찾을 수 있습니다. 해시 조인 또는 복합 조인과 같은 더 복잡한 유형을 포함하여 다양한 유형의 조인을 모두 알고 있어야 합니다. 또한 자연 조인이 무엇이며 언제 가장 유용한지 설명하라는 요청을 받을 수도 있습니다. 때로는 자연 조인과 내부 조인의 차이점을 설명해야 합니다.
 
일반적으로 원하는 결과를 얻으려면 다른 문과 함께 조인을 사용하는 데 대한 철저한 경험과 숙달이 있어야 합니다. 예를 들어, WHERE 절을 사용하여 내부 조인인 것처럼 교차 조인을 활용하는 방법을 알고 있어야 합니다. 또한 조인을 사용하여 서버에 큰 부담을 주지 않고 새 테이블을 생성하는 방법을 알고 있어야 합니다. 또는 외부 조인을 사용하여 데이터베이스를 쿼리할 때 누락된 값을 식별하고 채우는 방법. 또는 순서를 재정렬하면 출력이 변경될 수 있다는 사실과 같은 외부 조인의 내부 작동. 

다음은 내부 공동 진술 작성과 관련된 질문의 예입니다.

이것은 후보자에게 주문 크기를 총 지출의 백분율로 표시하도록 요청받는 상당히 어려운 질문입니다.
 
 

고급 개념 N1: 날짜-시간 조작

 
숙련된 전문가를 위한 SQL 면접 질문
 

데이터베이스에는 날짜와 시간이 포함되는 것이 일반적이므로 숙련된 데이터 과학자는 데이터베이스 작업에 대한 깊은 지식이 있어야 합니다. 이러한 유형의 데이터를 통해 이벤트가 발생하는 순서, 빈도 변화를 추적하고, 간격을 계산하고, 기타 중요한 통찰력을 얻을 수 있습니다. 이러한 작업을 수행하려면 SQL에서 날짜-시간 조작에 대한 완전한 숙달이 필요합니다. 따라서 이러한 일련의 기술을 갖춘 전문가는 경쟁 후보자보다 유리합니다. 자신의 기술에 100% 자신이 없다면 아래에 설명된 개념을 살펴보고 그 중 몇 가지가 친숙하게 들리는지 확인하십시오.

SQL에서 데이터 형식을 지정하는 데는 여러 가지(그러나 유효한) 접근 방식이 있기 때문에 훌륭한 코더는 적어도 이 모든 것에 익숙해야 합니다. 인터뷰 중에 채용 관리자는 기본 데이터 형식 개념에 대한 지식과 작업에 적합한 기능 선택에 대해 지능적으로 말할 수 있는 능력을 기대합니다. 여기에는 중요한 FORMAT() 함수에 대한 지식과 함수를 최대한 활용하기 위한 관련 구문이 포함됩니다. NOW()와 같은 다른 기본 기능에 대한 지식도 필요합니다. 또한 숙련된 전문가가 시계열 데이터 및 그 목적과 같은 기본 개념에 대해 묻는 것은 당연합니다.

지원하는 직업의 맥락을 고려하는 것도 중요합니다. AI 또는 IoT 회사는 센서에서 수집된 데이터를 추적하는 데 더 관심이 있는 반면 주식 거래 앱은 하루, 주 또는 월 동안 가격 변동을 추적해야 할 수 있습니다.

경우에 따라 고용주는 CAST(), EXTRACT() 또는 DATE_TRUNC()와 같은 SQL의 고급 날짜/시간 기능에 대해 질문할 수 있습니다. 이러한 함수는 날짜가 포함된 대량의 데이터로 작업할 때 매우 유용할 수 있습니다. 숙련된 데이터 과학자는 각 기능과 해당 응용 프로그램의 목적을 알고 있어야 합니다. 이상적인 시나리오에서는 과거에 사용 경험이 있어야 합니다.

SQL에서 가장 복잡한 날짜-시간 조작은 기본 기능과 고급 기능의 조합을 포함합니다. 따라서 보다 기본적인 FORMAT(), NOW(), CURRENT_DATE 및 CURRENT_TIME부터 시작하여 위에서 언급한 고급 기능을 포함하여 모두 알아야 합니다. 숙련된 데이터 과학자는 INTERVAL이 무엇을 하고 언제 사용해야 하는지도 알아야 합니다.

다음은 Airbnb 인터뷰에서 받은 질문의 예입니다., 여기서 후보자는 사용 가능한 데이터를 사용하여 Airbnb의 성장을 추적해야 합니다.
 
 

전제:

 
이 질문에서 후보자는 매년 등록한 호스트 수의 변화를 기반으로 에어비앤비의 성장을 추적하도록 요청받습니다. 즉, 새로 등록된 호스트 수를 매년 성장 지표로 사용합니다. 작년과 올해의 호스트 수 차이를 계산하고 그 수를 전년도에 등록된 호스트 수로 나누어 증가율을 찾습니다. 그런 다음 결과에 100을 곱하여 백분율 값을 찾습니다.

출력 테이블에는 현재 연도, 전년도의 호스트 수 및 연도별 증가율에 대한 열과 해당 데이터가 있어야 합니다. 백분율은 가장 가까운 정수로 반올림해야 하며 행은 연도에 따라 오름차순으로 정렬되어야 합니다.
 
 

해결 방법 :

 
이 질문에 답하기 위해 후보자는 많은 열을 포함하는 'airbnb_search_details'라는 테이블로 작업해야 합니다. 우리가 필요로 하는 열은 호스트가 웹사이트에 처음 가입한 연도, 월, 일을 나타내는 'host_since'라는 레이블이 지정됩니다. 이 연습에서는 월과 일과 관련이 없으므로 먼저 값에서 연도를 추출해야 합니다. 그런 다음 현재 연도, 이전 연도 및 해당 연도의 총 호스트 수에 대한 별도의 열을 포함하는 보기를 만들어야 합니다. 

host_since가 NULL이 아닌 airbnb_search_details에서 추출(연도 FROM 호스트_since::DATE)을 선택하세요.

지금까지 두 가지 작업을 수행했습니다.

  1. host_since 열이 비어 있지 않은 행만 포함하도록 했습니다.
  2. 데이터에서 연도를 추출하여 DATE 값으로 캐스팅했습니다.
extract(year FROM host_since::DATE) count(id)를 current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY year asc로 선택하세요.

그런 다음 ID를 계산하고 매년 GROUP BY 절을 설정합니다. 그리고 오름차순으로 표시되도록 합니다. 

이렇게 하면 연도와 해당 연도에 등록된 호스트 수라는 두 개의 열이 있는 테이블이 제공됩니다. 문제를 해결하는 데 필요한 전체 그림은 아직 없지만 올바른 방향으로 나아가는 단계입니다. 또한 전년도에 등록한 호스트에 대한 별도의 열이 필요합니다. 여기에서 LAG() 함수가 등장합니다.

SELECT 연도, 현재_연도_호스트, LAG(현재_연도_호스트, 1) OVER (ORDER BY 연도) as prev_year_host 추출(연도 FROM 호스트_since::DATE) 개수(id) 선택 :DATE) 연도별 순서 오름차순

여기에 'prev_year_host'라는 레이블이 붙은 세 번째 열을 추가했으며 해당 값은 한 행의 지연을 제외하고 'current_year_host'에서 가져옵니다. 다음과 같이 보일 수 있습니다.

숙련된 전문가를 위한 SQL 면접 질문
 

이런 식으로 테이블을 배열하면 최종 성장률을 계산하는 것이 매우 편리합니다. 방정식의 모든 값에 대해 별도의 열이 있습니다. 궁극적으로 코드는 다음과 같아야 합니다.

SELECT 연도, 현재_연도_호스트, prev_year_host, round(((현재_연도_호스트 - prev_year_host)/(cast(prev_year_host AS 숫자)))*100) estimate_growth FROM (SELECT 연도, 현재_연도_호스트, LAG(현재_연도_호스트, 1) OVER (ORDER BY 연도) AS prev_year_host FROM (SELECT extract(연도 FROM 호스트_since::날짜) AS 연도, 개수(id) current_year_host FROM airbnb_search_details WHERE 호스트_since는 NULL이 아닙니다 GROUP BY extract(연도 FROM 호스트_since::날짜) ORDER BY 연도) t1) t2

여기에 다른 쿼리와 성장률을 계산하는 다른 열을 추가합니다. 초기 결과에 100을 곱하고 작업 요구 사항을 충족하도록 반올림해야 합니다. 

이것이 이 작업의 해결책입니다. 날짜-시간 조작 기능은 작업을 완료하는 데 필수적이었습니다. 
 
 

고급 개념 N2: 창 기능 및 파티션

 
숙련된 전문가를 위한 SQL 면접 질문
 

SQL 창 함수 복잡하지만 효율적인 SQL 쿼리를 작성하기 위한 가장 중요한 개념 중 하나입니다. 숙련된 전문가는 창 기능에 대한 깊이 있는 실용적이고 이론적인 지식을 가지고 있어야 합니다. 여기에는 over 절이 무엇인지 알고 사용법을 익히는 것이 포함됩니다. 면접관은 OVER 절이 집계 함수를 창 함수로 바꾸는 방법을 묻습니다. 창 함수로 사용할 수 있는 세 가지 집계 함수에 대해 질문을 받을 수도 있습니다. 숙련된 데이터 과학자는 집계되지 않은 다른 창 기능도 알고 있어야 합니다.

창 기능을 최대한 활용하려면 PARTITION BY 절이 무엇인지, 어떻게 사용하는지 알아야 합니다. 이를 설명하고 몇 가지 사용 사례의 예를 제공하라는 요청을 받을 수 있습니다. 때로는 ORDER_BY 절을 사용하여 파티션 내에서 행을 구성해야 합니다.

ROW_NUMBER()와 같은 모든 개별 창 기능에 대한 철저한 지식을 입증할 수 있는 응시자는 유리합니다. 말할 필요도 없이 이론적인 지식만으로는 충분하지 않습니다. 전문가는 파티션이 있든 없든 실무에서 이를 사용한 경험이 있어야 합니다. 예를 들어, 숙련된 전문가는 RANK()와 DENSE_RANK()의 차이점을 설명할 수 있어야 합니다. 이상적인 후보자는 파티션 내의 프레임과 같은 가장 고급 개념을 알고 명확하게 설명할 수 있어야 합니다.

훌륭한 후보자는 NTH_VALUE() 함수의 사용에 대해서도 설명해야 합니다. FIRST_VALUE() 및 LAST_VALUE() 함수와 같은 이 함수의 대안을 언급하는 것은 나쁘지 않습니다. 회사는 일반적으로 사분위수, 분위수 및 백분위수를 측정하는 것을 좋아합니다. 이 작업을 수행하려면 데이터 과학자가 NTILE() 창 함수를 사용하는 방법도 알고 있어야 합니다.

SQL에는 일반적으로 작업에 접근하는 여러 가지 방법이 있습니다. 여전히 창 기능은 일반적이지만 복잡한 작업을 수행하는 가장 쉬운 방법을 제공합니다. 이러한 창 함수의 좋은 예는 LAG() 또는 LEAD()이므로 이들에 대해서도 잘 알고 있어야 합니다. 예를 들어, 어려운 Airbnb 인터뷰 질문에 대한 이전 솔루션의 예를 살펴보겠습니다.

전년도의 호스트 수를 표시하기 위해 OVER 문과 함께 LAG() 함수를 사용했습니다. 이것은 다른 여러 가지 방법으로 수행할 수 있었지만 창 함수를 사용하면 SQL 코드 한 줄로 원하는 결과를 얻을 수 있습니다.

LAG(current_year_host, 1) OVER(ORDER BY 연도) as prev_year_host

많은 기업이 일정 기간 동안의 성장을 계산해야 합니다. LAG() 함수는 이러한 할당을 완료하는 데 매우 유용할 수 있습니다.
 
 

고급 개념 N3: 월간 성장

 
숙련된 전문가를 위한 SQL 면접 질문
 

많은 조직에서 데이터 분석을 사용하여 자체 성과를 측정합니다. 여기에는 특정 투자에 대한 마케팅 캠페인 또는 ROI의 효과 측정이 포함될 수 있습니다. 이러한 분석을 수행하려면 날짜, 시간 및 창 기능과 같은 SQL에 대한 심층적인 지식이 필요합니다.

데이터 과학자는 또한 데이터 형식 지정 및 백분율 또는 기타 형식으로 표시하는 기술을 증명해야 합니다. 일반적으로 월별 성장을 계산해야 하는 실용적인 문제를 해결하려면 여러 기술 세트의 조합을 사용해야 합니다. 필요한 개념 중 일부는 고급 개념(창 기능, 날짜-시간 조작)인 반면 다른 개념은 기본(집계 기능 및 공통 SQL 문)입니다.

Amazon의 면접관이 한 질문의 예를 살펴보겠습니다.

전제:

 
이 질문에서 우리는 구매 테이블을 사용하여 월별 매출 증가 또는 감소를 계산해야 합니다. 최종 결과는 특정 방식(YYYY-MM 형식)으로 형식이 지정되어야 하며 백분율은 두 번째로 가까운 소수점 이하 자릿수로 반올림해야 합니다. 

해결 방법 :

 
이와 같은 작업을 수행할 때 가장 먼저 해야 할 일은 표를 이해하는 것입니다. 또한 질문에 답하기 위해 작업해야 하는 열을 식별해야 합니다. 그리고 당신의 출력이 어떻게 보일지.

이 예에서 데이터 값에는 객체 유형이 있으므로 CAST() 함수를 사용하여 날짜 유형으로 변환해야 합니다.

SELECT to_char(cast(created_at as date), 'YYYY-MM') FROM sf_transactions

질문은 날짜 형식도 지정하므로 SQL에서 TO_CHAR() 함수를 사용하여 이 형식으로 날짜를 출력할 수 있습니다.

성장을 계산하려면 해당 날짜의 총 판매량을 얻기 위해 created_at 및 SUM() 집계 함수도 선택해야 합니다. 

SELECT to_char(cast(created_at as date), 'YYYY-MM'),created_at, sum(value) FROM sf_transactions

이 시점에서 우리는 윈도우 기능을 다시 사용해야 합니다. 특히 LAG() 함수를 사용하여 지난 달의 볼륨에 액세스하고 이를 별도의 열로 표시합니다. 이를 위해서는 OVER 절도 필요합니다.

SELECT to_char(캐스트(생성_at 날짜), 'YYYY-MM') AS year_month, 생성_at, 합계(값) lag(합(값), 1) OVER (ORDER BY 생성_at::날짜) FROM sf_transactions GROUP BY 생성_at

지금까지 작성한 코드를 기반으로 테이블은 다음과 같이 보일 것입니다.

숙련된 전문가를 위한 SQL 면접 질문
 

여기에서 합계 열에 날짜와 해당 합계 값이 있고 지연 열에 마지막 날짜 값이 있습니다. 이제 값을 공식에 ​​연결하고 별도의 열에 성장률을 표시할 수 있습니다.

또한 불필요한 created_at 열을 제거하고 GROUP BY 및 ORDER BY 절을 year_month로 변경해야 합니다.

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 년_월

코드를 실행하면 테이블에는 계산에 필수적인 열만 포함되어야 합니다.

숙련된 전문가를 위한 SQL 면접 질문
 

이제 마침내 솔루션에 도달할 수 있습니다. 최종 코드는 다음과 같습니다.

SELECT to_char(created_at::date, 'YYYY-MM') AS year_month, round(((sum(value) - lag(sum(value), 1) OVER w) / (lag(sum(value), 1) OVER w)) * 100, 2) AS 수익_차이_pct FROM sf_transactions GROUP BY year_month WINDOW w AS ( ORDER BY to_char(created_at::date, 'YYYY-MM')) ORDER BY year_month ASC


 

이 코드에서는 이전 예제에서 두 개의 열 값을 가져와서 그 차이를 계산합니다. 코드의 반복성을 줄이기 위해 창 별칭도 사용합니다.

그런 다음 알고리즘에 따라 당월 수익으로 나누고 100을 곱하여 백분율 값을 얻습니다. 마지막으로 백분율 값을 소수점 이하 두 자리로 반올림합니다. 우리는 작업의 모든 요구 사항을 충족하는 답변에 도달합니다. 

Advanced Concept N4: 이탈률

 
성장의 반대 개념이지만 이탈도 중요한 지표입니다. 많은 회사에서 특히 비즈니스 모델이 구독 기반인 경우 해지율을 추적합니다. 이렇게 하면 손실된 구독 또는 계정 수를 추적하고 그 원인을 예측할 수 있습니다. 숙련된 데이터 과학자는 이탈률을 계산하는 데 사용할 기능, 설명 및 절을 알고 있어야 합니다.

구독 데이터는 매우 사적이며 사적인 사용자 정보를 포함합니다. 데이터 과학자가 이러한 데이터를 노출하지 않고 작업하는 방법을 아는 것도 중요합니다. 종종 이탈률을 계산하는 데는 비교적 새로운 개념인 공통 테이블 표현식이 포함됩니다. 최고의 데이터 과학자는 CTE가 왜 유용한지, 언제 사용해야 하는지 알아야 합니다. CTE를 사용할 수 없는 오래된 데이터베이스로 작업할 때 이상적인 후보자는 여전히 작업을 완료할 수 있어야 합니다.

다음은 어려운 작업의 예입니다.. Lyft에서 면접하는 후보자는 회사에서 드라이버의 이탈률을 계산하기 위해 이 과제를 받습니다.

이 문제를 해결하기 위해 데이터 과학자는 case/when 문, LAG()와 같은 창 함수, FROM/WHERE 및 기타 기본 절을 사용해야 합니다. 

결론

 
수년 동안 데이터 과학자로 일하는 것은 확실히 이력서에서 인상적으로 보이고 많은 인터뷰를 받게 될 것입니다. 그러나 일단 문을 열면 수년간의 경험을 보완하기 위해 여전히 지식을 표시해야 합니다. 폭넓은 경험이 있더라도 SQL로 쿼리 작성, 다음과 같은 리소스를 사용하는 것은 나쁘지 않습니다. 스트라타스크래치 당신의 지식을 새로 고침.

 
 
네이트 로시디 데이터 과학자이자 제품 전략 분야의 전문가입니다. 그는 분석을 가르치는 겸임 교수이기도 하며, 스트라타스크래치, 데이터 사이언티스트가 상위 기업의 실제 인터뷰 질문을 통해 인터뷰를 준비하는 데 도움이 되는 플랫폼입니다. 그와 연결 트위터: StrataScratch or 링크드인.

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

타임 스탬프 :

더보기 너 겟츠