SQL 코드카타
문제 링크
오늘 문제에서 기억해야 할 건 두 가지.
window 함수를 쓸 때 over() 속에 아무런 인자를 집어넣지 않고 쓰면 그냥 원본 데이터 기준으로 적용된다. 즉, row_number() over() 라고만 쓰면 원본 데이터의 id 순서가 틀어지지 않고 유지될 수 있다는 것.
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;
열심히 달려준 팀원들 덕분에 중간발표도 무사히 마무리.
최종발표 전까지 부지런히 논리를 점검하고 시각화 다듬어 보자🔥
이제 부트캠프 더 하고 싶어도(사실 그만하고 싶음) 며칠 안 남았다!