240809_TIL

J Lee·2024년 8월 9일
0

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 코드카타

문제 링크
오늘 문제에서 기억해야 할 건 두 가지.

  1. window 함수를 쓸 때 over() 속에 아무런 인자를 집어넣지 않고 쓰면 그냥 원본 데이터 기준으로 적용된다. 즉, row_number() over() 라고만 쓰면 원본 데이터의 id 순서가 틀어지지 않고 유지될 수 있다는 것.

  2. window 함수 중에 first_value라는 놈이 있는데, 이건 말 그대로 partition by 뒤에 오는 인자를 기준으로 가장 첫 번째 값을 불러다가 채워주는 것이다. 이 문제에서는 null인 경우의 데이터를 '그 직전에 나온 null 아닌 값'으로 채워야 하므로 이 함수를 쓰는 게 필요한 것.

처음 보는 window함수가 등장해서 풀이가 막혔었는데, 원리만 알고 나면 그렇게 어려운 건 아니다. 잘 기록해 뒀으니 나중에 마주치면 당황하지 말고 써 보자.

WITH a
     AS (SELECT *,
                Row_number()
                  OVER() AS "row_id"
         FROM   coffeeshop),
     b
     AS (SELECT *,
                Sum(If(drink IS NULL, 0, 1))
                  OVER(
                    ORDER BY row_id) AS "group_id"
         FROM   a)
SELECT id,
       First_value(drink)
         OVER(
           partition BY group_id
           ORDER BY row_id) AS "drink"
FROM   b;

열심히 달려준 팀원들 덕분에 중간발표도 무사히 마무리.
최종발표 전까지 부지런히 논리를 점검하고 시각화 다듬어 보자🔥

이제 부트캠프 더 하고 싶어도(사실 그만하고 싶음) 며칠 안 남았다!

profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보