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

[StrataScratch - SQL] (Medium) Top 10 Songs 2010

문제2010년의 상위 10위에 랭크된 노래를 찾으십시오. 순위, 그룹 이름, 노래 이름을 출력하되, 동일한 노래는 두 번 표시하지 마십시오. 결과는 순위를 기준으로 오름차순 정렬하십시오. 테이블설명 예상결과 ✏️ 풀이 SELECT DISTINCT(song_name), group_name, year_rankFROM billboard_top_100_year_endWHERE year = 2010 AND year_rank 1. 2010년 → year = 20102. 상위 10위에 랭크된 노래 → year_rank 3. 동일한 노래는 두 번 표시하지 말 것 → DISTINCT(song_name)

[StrataScratch - SQL] (Medium) Processed Ticket Rate By Type

문제각 유형별 처리율을 구하십시오. 처리율은 해당 유형의 전체 티켓 수로 나눈 처리된 티켓 수로 정의됩니다. 이 결과는 소수점 둘째 자리까지 반올림하십시오. 테이블설명 예상결과 ✏️ 풀이 SELECT type, ROUND(AVG(processed), 2) AS processed_rateFROM facebook_complaintsGROUP BY typeORDER BY type;처리율은 해당 유형의 전체 티켓 수로 나눈 처리된 티켓 수로 정의되기 때문에처리율별 평균을 구한다

[StrataScratch - SQL] (Medium) Spam Posts

문제 날짜별로 조회된 전체 게시물 중 스팸 게시물의 비율을 계산하십시오. 게시물의 키워드에 문자열 'spam'이 포함되어 있으면 해당 게시물은 스팸으로 간주됩니다. facebook_posts 테이블은 사용자가 게시한 모든 게시물을 저장합니다. facebook_post_views 테이블은 사용자가 게시물을 조회했는지를 나타내는 액션 테이블입니다. 테이블설명 예상결과 ✏️ 풀이 WITH cnt_post AS ( SELECT post_date, COUNT(viewer_id) AS cnt_p FROM facebook_posts p JOIN facebook_post_views v ON p.post_id = v.post_id GROUP BY 1), cnt_spam AS ( SELECT ..

[StrataScratch - SQL] (Medium) Apple Product Counts

문제우리는 사용자 데이터 분석을 통해 적어도 한 번의 이벤트를 수행한 사용자들 사이에서 Apple 기기의 인기도를 이해하려고 합니다. 구체적으로, 다양한 언어별로 이 인기도를 측정하고자 합니다. "macbook pro", "iphone 5s", "ipad air"를 사용하는 Apple 기기 사용자 수를 세고, 각 언어별 전체 사용자 수와 비교해주세요.결과는 언어, Apple 기기 사용자 수, 각 언어별 전체 사용자 수를 포함하여 출력하세요. 마지막으로, 전체 사용자 수가 많은 언어부터 결과가 정렬되도록 하세요. 테이블설명예상결과 ✏️ 풀이SELECT language, COUNT(DISTINCT CASE WHEN device = 'macbook pro' ..

[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..