TIL - 250221

오정수·2025년 2월 21일

TIL

목록 보기
54/78

와 여태 난이도가 쉬움이랑 중간이었는데 어제부터 "Hard"로 들어왔다. 어젠 Hard도 별게 없네. 쉽다~ 이러면서 했는데 오늘 하는데 죽을 거 같다. 문제도 제대로 이해가 안 되고 어렵다. 근데 붙잡고 풀었을 때 희열감은 이루 말할 수 없다.

리뷰 1 : 이걸 문제부터 이해 못했다. 문제는 item_type이 prime_eligible인 것들을 먼저 적재하고 남는 거에 no_prime을 넣는 것이다. 여기서 각각 아이템 갯수를 구하는 문제이다. cte를 활용해서 필요한 것들을 만들고 TRUNC를 통해 소숫점을 버릴 필요가 있을 땐 버렸다. 나머지는 뭐 문제 이해만 하면 금방 하는 거라..

리뷰 2 : 중앙값을 구하는 것에 애를 먹었다. 파이썬은 고냥 함수 찍하면 되는데.. 파이썬이 그리운 문제였다. 일단 SQL을 실습하는 거니깐.. 보니까 이번 문제는 누적합을 이용해서 중앙값 위치를 알아내고 중앙값을 구하면 되는 것이었다. 고로, 누적합(sum_num)과 이전 누적합(pre_num)을 구해주고 중앙값(mid)의 위치를 정의한다. 이후 pre_num과 sum_num 사이에 mid가 있는 값을 구한다. 마지막으로 값이 하나면 그대로 출력, 두 개면 AVG()를 이용해 평균을 구하면..끝..!

URL : https://datalemur.com/questions/prime-warehouse-storage

WITH cte AS(
  SELECT
    item_type
    ,SUM(square_footage) sum_sq
    ,COUNT(*) cnt
  FROM inventory
  GROUP BY 1
), cte2 AS(
  SELECT
    TRUNC(500000/sum_sq)*sum_sq sum_pe_sq
  FROM cte
  WHERE item_type='prime_eligible'
)
SELECT
  item_type
  ,CASE
    WHEN item_type='prime_eligible'
      THEN ROUND(sum_pe_sq/sum_sq*cnt)
      ELSE TRUNC((500000-sum_pe_sq)/sum_sq)*cnt
    END
FROM cte, cte2
ORDER BY 2 DESC

URL : https://datalemur.com/questions/median-search-freq

WITH cte AS (
  SELECT
    SUM(num_users) / 2 mid
  FROM search_frequency
), cte2 AS (
  SELECT
    searches
  FROM (
    SELECT
      *
      ,LAG(sum_num,1) OVER (ORDER BY searches) pre_num
    FROM (
      SELECT
        *
        ,SUM(num_users) OVER(ORDER BY searches) sum_num
      FROM search_frequency
    ) a
  ) b
  WHERE pre_num <= (SELECT * FROM cte)
  AND sum_num >= (SELECT * FROM cte)
)
SELECT
  CASE 
    WHEN COUNT(*) = 2 
    THEN ROUND(AVG(searches), 1)
    ELSE SUM(searches) END median
FROM cte2
profile
안녕하세요 오정수입니다

0개의 댓글