2025.04.14

 

SQL 공부하면서

어느정도 기본 지식은 알고 있었기에

이론 공부보다는 문제 풀이 위주로 진행하고 있는데 슬슬 모르는 개념이 나오기 시작한다.

 

LeetCode의

22. Game Play Analysis IV

 

게임 플레이 한 사람 중 가 다음날도 접속한 사람의 비율을 구하는 문제다.

실제 게임회사 혹은 출첵 관련 기능이 필요한 곳에서

꾸준히 접속하는 유저를 구분하기에 좋아보이는, 그때 사용할 SQL문 같다.

 

소수점 2자리까지 자르고, 합산 정도 하는거라 ROUND, SUM, COUNT, DATEDIFF 정도 사용될거 같았는데 웬걸

[6/15] 테스트 케이스에서 절반이상 안된단다.

 

그래서 LeetCode 댓글과 구글링을 해보니 CTE(Common Table Expression) 라는 걸 활용한다. 

이후 GPT에도 넣어보니 CTE 방법을 쓴다. 

 

 

 

CTE를 간략 설명하자면

쿼리 안에서 잠깐 사용하는 ‘임시 테이블’ 같은 것.
복잡한 쿼리를 쪼개서 미리 준비해두고,
마치 일반 테이블처럼 불러와서 쓸 수 있다.

 

메인 쿼리에서 정의되어 사용된다는 점이 서브 쿼리와 비슷하지만 재사용이 가능하다는 점이 다르다.

 

문제 일부를 CTE로 나타내보면 다음과 같다.

WITH first_login AS (
  SELECT player_id, MIN(event_date) AS first_date
  FROM Activity
  GROUP BY player_id
)

이렇게 미리 데이터를 정의해두고, 이후 쿼리에서 first_login을 마치 테이블처럼 불러와 활용할 수 있다.

 

평소처럼 문제 풀다가 급당황해서 찾아보고 글도 적게 되었다. 잔잔하게,, 매일 문제 풀고 있는데 슬슬 책의 힘이 필요해보인다.

+ Recent posts