[코딩테스트]/[SQL] 75

[StrataScratch - SQL] (Medium) No Order Customers

문제2019-02-01과 2019-03-01 사이에 주문을 하지 않은 고객을 식별하세요.포함 사항:• 이 날짜 범위 외에만 주문을 한 고객.• 주문을 한 적이 없는 고객.고객의 이름을 출력하세요. 테이블설명 예상결과 ✏️ 풀이WITH order_cust AS ( SELECT cust_id FROM orders WHERE order_date >= '2019-02-01' AND order_date 1. 2019-02-01 ~ 2019-03-01 사이에 주문한 고객 정보 저장2. customer 테이블과 1번 LEFT JOIN3. cust_id가 null 인 고객 조회(1번 날짜 범위의 주문 고객을 제외하기 위함)

[StrataScratch - SQL] (Medium) Number Of Units Per Nationality

문제우리는 임대 아파트와 그 소유자에 대한 데이터를 가지고 있습니다. 30세 이하의 사람들이 소유한 아파트(단위는 unit_id 기준)가 몇 개 있는지, 그리고 그들의 국적별로 나누어 계산하는 쿼리를 작성해주세요. 어떤 국적이 가장 많은 아파트를 소유하고 있는지 보기 원하므로, 결과를 그에 맞게 정렬해주세요. 테이블설명 예상결과 ✏️ 풀이SELECT h.nationality, COUNT(DISTINCT u.unit_id) AS apartment_countFROM airbnb_hosts AS hINNER JOIN airbnb_units AS u ON h.host_id = u.host_idWHERE age 1. airbnb_hosts, airbnb_units 테이블 조인2. 30세 이하 조건 추가3. 아파..

[StrataScratch - SQL] (Medium) Ranking Most Active Guests

문제전체 메시지 활동량을 기준으로 게스트를 순위별로 나열하여 가장 활발한 게스트를 식별하시오. 가장 활발한 게스트는 호스트와 가장 많은 메시지를 주고받은 사람이어야 하며, 가장 높은 순위를 가져야 한다. 두 명 이상의 게스트가 동일한 메시지 수를 가지고 있다면 동일한 순위를 가져야 한다. 중요한 점은, 여러 게스트가 같은 순위를 가지더라도 순위 번호는 건너뛰지 않아야 한다. 결과는 순위, 게스트 식별자, 각 게스트의 총 메시지 수를 명확하게 보여주는 형식으로, 가장 활발한 게스트부터 덜 활발한 게스트 순으로 정렬하여 제시하시오. 테이블설명 예상결과 ✏️ 풀이 WITH sum_m AS ( SELECT id_guest, SUM(n_messages) AS sum_n_message FROM airb..

[StrataScratch - SQL] (Medium) Number of Streets Per Zip Code

문제각 우편번호별로 고유한 거리 이름의 수를 계산하시오. 거리 이름의 첫 번째 단어만 사용하며 대소문자는 구분하지 않는다(예: "FOLSOM"과 "Folsom"은 동일하게 간주). 구조가 반대인 경우(예: "Pier 39"과 "39 Pier")에도 동일한 거리로 간주한다. 결과는 우편번호와 함께 출력하며, 거리 수를 기준으로 내림차순 정렬하고, 거리 수가 같을 경우 우편번호를 오름차순으로 정렬한다. 테이블설명 예상결과 ✏️ 풀이 SELECT business_postal_code AS postal_code, COUNT(DISTINCT LOWER(CASE WHEN REGEXP_LIKE(business_address, "^[0-9]") = 1 THEN substring_index(sub..

[StrataScratch - SQL] (Medium) Acceptance Rate By Date

문제친구 요청이 전송된 각 날짜에 대한 친구 수락률을 계산하세요. 요청은 action = sent일 때 전송된 것으로 간주되며, action = accepted일 때 수락된 것으로 간주됩니다. 요청이 수락되지 않은 경우, 해당 요청의 수락 기록은 테이블에 존재하지 않습니다. 출력은 요청이 전송된 날짜 중에서 적어도 하나 이상의 요청이 수락된 날짜만 포함해야 하며, 수락률은 해당 날짜에 대해서만 계산될 수 있습니다. 결과는 가장 이른 날짜부터 가장 늦은 날짜 순으로 정렬되어야 합니다. 테이블설명 예상결과 ✏️ 풀이WITH sender AS ( SELECT * FROM fb_friend_requests WHERE action = 'sent'), receiver AS ( SELECT *..

[StrataScratch - SQL] (Medium) Premium vs Freemium

문제날짜별로 유료 사용자와 비유료 사용자의 총 다운로드 수를 구하세요. 비유료 사용자가 유료 사용자보다 더 많은 다운로드를 한 기록만 포함하세요. 출력은 가장 이른 날짜부터 정렬되어야 하며, 세 개의 열인 날짜, 비유료 다운로드 수, 유료 다운로드 수를 포함해야 합니다. 힌트: Oracle에서는 날짜 열을 참조할 때 "date"를 사용하세요 (예약어). 테이블설명 예상결과 ✏️ 풀이SELECT date, SUM(IF(paying_customer = 'no', downloads, 0)) AS non_paying, SUM(IF(paying_customer = 'yes', downloads, 0)) AS payingFROM ms_download_facts AS dJOIN ms_use..

[StrataScratch - SQL] (Medium) Clicked Vs Non-Clicked Search Results

문제검색 결과를 기반으로 두 개의 비율을 계산하세요. 먼저, 클릭된 기록들(clicked = 1) 중 상위 3위 안에 있는 비율을 구하세요. 두 번째로, 클릭되지 않은 기록들(clicked = 0) 중 상위 3위 안에 있는 비율을 구하세요. 두 비율 모두 전체 검색 기록 수를 기준으로 계산되어야 하며, 동일한 행에 두 개의 열로 출력되어야 합니다. 테이블설명 예상결과 ✏️ 풀이WITH clicked_cnt AS ( SELECT COUNT(*) AS c_cnt FROM fb_search_events WHERE clicked = 1 AND search_results_position 1. clicked = 1 의 top3 count2. clicked = 0 의 top3 count3. 전체 1..

[StrataScratch - SQL] (Medium) Meta/Facebook Accounts

문제2020년 1월 10일에 종료된 계정의 비율을 fb_account_status 테이블을 사용하여 계산하세요. 테이블설명 예상결과 ✏️ 풀이WITH total_cnt AS ( SELECT COUNT(*) AS totalCnt FROM fb_account_status WHERE status_date = '2020-01-10')SELECT COUNT(acc_id) / totalCnt AS closed_ratioFROM fb_account_statusJOIN total_cntWHERE status_date = '2020-01-10' AND status = 'closed';1. 2020-01-10 일자의 계정 카운트2. 2020-01-10 일자의 종료 계정 카운트3. 1번의 값과 2번의 값 ..

[StrataScratch - SQL] (Medium) Risky Projects

문제다음은 주어진 프로젝트 및 직원 데이터에 대한 설명입니다. 각 프로젝트는 이름, 예산, 특정 기간을 가지고 있으며, 각 직원은 연봉을 가지고 있고 특정 기간 동안 하나 이상의 프로젝트에 배정될 수 있습니다. 작업은 어떤 프로젝트가 예산을 초과했는지 식별하는 것입니다. 프로젝트가 예산을 초과했다고 간주되는 경우는, 해당 프로젝트에 배정된 모든 직원의 비례 비용 합이 프로젝트 예산을 초과하는 경우입니다.이를 해결하려면, 각 직원의 연봉을 해당 프로젝트에서 실제로 작업한 기간에 맞게 비례 배분해야 합니다. 예를 들어, 직원이 6개월 동안 작업한 경우, 연봉의 절반만 해당 프로젝트에 할당되어야 합니다. 각 프로젝트에 배정된 모든 직원의 비례 급여 금액을 합산하고, 그 총액을 프로젝트 예산과 비교합니다.출력에..

[StrataScratch - SQL] (Medium) New Products

문제2020년과 2019년을 비교하여 회사별 출시된 제품 수의 순변화를 계산하십시오. 출력에는 회사 이름과 순차이가 포함되어야 합니다.(순차이 = 2020년에 출시된 제품 수 - 2019년에 출시된 제품 수.) 테이블설명 예상결과 ✏️ 풀이# 풀이1 #SELECT company_name, SUM(IF(year = 2020, 1, 0)) - SUM(IF(year = 2019, 1, 0)) AS total_launchFROM car_launchesGROUP BY 1;# 풀이2 #SELECT company_name, SUM(CASE WHEN year = 2020 THEN 1 ELSE 0 END) - SUM(CASE WHEN year = 2019 THEN 1 ELSE 0 END) AS total_l..