coding 38

[해커랭크] Contest Leaderboard

medium 난이도의 문제 문제에서 원하는 바는 challenge 별 최고 값의 합을 hacker_id 기준으로 나타내는 것이다. 1. 먼저 hacker_id , challenge_id 기준으로 max(score) 값을 구하여 챌린지별 최상위 스코어를 구함. 2. 1번을 서브쿼리화 하여 최종적인 답을 구하면 된다. select hacker_id , name , sum(max_score) as total_scorefrom ( SELECT h.hacker_id as hacker_id , h.name as name , s.challenge_id as challenge_id , max(score) as max_score ..

[리트코드] 3521. Find Product Recommendation Pairs

join만 잘해주면 그 이후부턴,, 문제 없는 쉽지만 생각을 잘 해야하는 문제! 먼저 셀프조인으로 user_id 기준으로 결합하되 product_id 이 과정이 나에게 꽤나 어려웠다. 그 이후에는 productInfo 조인을 통해 카테고리 이름을 결합해주면 끝이다. ** count >= 3 이상인 조건도 필수적으로 having 에 넣어준다! ** # Write your MySQL query statement belowselect pp1.product_id as product1_id , pp2.product_id as product2_id , pin_1.category as product1_category , pin_2.category as product2..

[solvesql] 온라인 쇼핑몰의 Stickiness

구해야하는 컬럼은 dt , dau , wau , dau/wau 지표. wau 를 구하는 방식에서 JOIN 이 머릿속에서 구조화가 되지 않아서 너무 힘들었기에 다시 한번 정리한다.  1. 먼저 11월 한달간의 dau를 구하는것은 너무나도 쉽다. 2. 그러나 , wau 를 구하려면 dt 기준에서 7일간의 dt 를 JOIN 을 해야하는데  먼저 정답인 쿼리는 select dt ,dau ,wau ,round(dau/wau,2) as stickinessfrom ( select d.order_date as dt , count(distinct d.customer_id) as dau , count(distinct w.customer_id) as wau from r..

PERCENT_RANK()

PERCENT_RANK() 는 주어진 값이 데이터 세트 내에서 어느 위치에 해당하는지 백분위로 계산하는 윈도우 함수이다. 해커랭크에서 중위값을 계산할때 median 함수가 없는 MYSQL 내에서 사용하기 좋다. 주로 순위 랭크함수와 관련된 계산에서 사용되고 데이터 분포를 기반으로 상대적인 순위를 제공한다.  PERCENT_RANK() OVER (ORDER BY column_name) 1. 특정 열에 대해 상대적 백분위 순위 계산2. ORDER BY 사용이 중요하다! 백분위 계산의 기준이 되는 열을 지정하기 때문3. 0-1 사이의 값으로 결과가 나타나고 해당 값이 데이터 집합 내에서 상대적으로 몇 번째 위치에 있는지 나타낸다.   해커랭크의 아래 문제에서 사용된 PERCENT_RANK()Weather Ob..

[해커랭크] New Companies

[문제상황]많은 테이블이 주어졌지만, 사실상 필요한 테이블은 Company 테이블과 Employee 테이블이다. - founder 컬럼이 필요하기 때문에 두 테이블을 JOIN 했다.  회사, Founder 이름을 기준으로 묶어서 집계하는 것이 해답!  SELECT c.company_code , c.founder, count(DISTINCT lead_manager_code), count(DISTINCT senior_manager_code), count(DISTINCT manager_code), count(DISTINCT employee_code)FROM Employee e JOIN Company c ON e.company_code = c.com..

[프로그래머스] 오프라인/온라인 판매 데이터 통합하기

문제상황은 ONLINE과 OFFLINE 의 데이터를 합치는 것인데 JOIN 으로 해결되는 문제가 아니기 때문에 UNION 을 쓴다. 문제 고려 사항은 - 각각의 테이블 3월 데이터로 1차 필터링 할 것 - OFFLINE 테이블엔 USER_ID 가 없으므로 NULL로 지정하고 하나의 열을 만들어줄 것  처음에는 UNION 뒤에 판매날짜와 PRODUCT_ID 로 그룹화해서 집계를 하는 것인가 했는데, 아니었다. 그냥 합치면 되는 것... 결국 UNION을 쓰는 것에 대해 물어본 것이었음..  SELECT DATE_FORMAT(SALES_DATE ,'%Y-%m-%d') as SALES_DATE , PRODUCT_ID , USER_ID , SALES_AMOUNT FROM ONLINE_SALE..

[리트코드] 1174. Immediate Food Delivery II

sql 코딩테스트는 어디서도 떨어지기 싫다는 목표로,, 매일 easy 든 medium이든 high 든 풀고있다. [풀이과정] 정리하자면 문제에서 요구하는 바는 첫주문이면서,customer_pref_delivery_date 와 첫주문 일자가 같은 Customer_id를 찾은 후  찾은 customer_id /전체 customer_id * 100 을 해주면 된다고 이해했다.  [맞춘 정답 코드]with sub_t as ( select customer_id , order_date , customer_pref_delivery_date , case when t.rk = 1 then 1 else 0 end as first_order , case when t..

[리트코드] 620. Not Boring Movies

select id , movie , description , ratingfrom ( select case when mod(id,2) = 1 then id end as id ,movie ,description ,rating from Cinema ) as t where id is not null and description 'boring'order by rating desc ; [풀이과정]  1. id 가 홀수인 table 을 서브쿼리로 먼저 만든다.2. 홀수인 id 에서  description이 boring 을 포함하고 있지 않도록 조건을 설정 3. rating 기준으로 내림차순   그리 복..