250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

데이터 놀이터

Leetcode - 180. Game Play Analysis I 본문

SQL

Leetcode - 180. Game Play Analysis I

jjjk84 2023. 10. 31. 20:43
728x90

1. 문제

 

 

 

Table: Activity

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
(player_id, event_date) is the primary key (combination of columns with unique values) of this table.
This table shows the activity of players of some games.
Each row is a record of a player who logged in and played a number of games (possibly 0) before logging out on someday using some device.

 

Write a solution to find the first login date for each player.

Return the result table in any order.

 

 

https://leetcode.com/problems/game-play-analysis-i/

 

 

2. 문제 조건

 

1. Write a solution to find the first login date for each player.

 

-> 첫번째 방법. player_id로 group by 하여 min(event_date)을 구한다.

-> 두번째 방법. player_id별로 event_date가 빠른 날부터 rank를 달고, rank가 1인 것만 추출한다.

 

 

3. 코드 작성

 

-- 첫번째 방법 (GROUP BY 활용)
SELECT player_id
     , MIN(event_date) AS first_login
FROM activity
GROUP BY player_id


-- 두번째 방법 (WINDOW 함수 활용)
WITH date_rank AS (
    SELECT player_id
         , event_date
         , ROW_NUMBER() OVER (PARTITION BY player_id ORDER BY event_date) AS rankn
    FROM activity
)

SELECT player_id
     , event_date AS first_login
FROM date_rank
WHERE rankn = 1

 

 

 

4. 회고

 

  • 사실 이 문제는 GROUP BY와 집계함수를 이용하면 간단하게 풀 수 있는 문제다.
  • 하지만, WINDOW 함수인 ROW_NUMBER()를 활용법을 익히기에 적합하여 풀어보았다.
  • SQL을 공부하면서 같은 문제에 여러 방법으로 데이터를 추출할 수 있는 방법을 찾을 수 있다는 점이 흥미롭다. 실무에서는 이 중 효율적인 쿼리문을 활용하여 데이터를 추출할 수 있도록 유의해야겠다.
728x90

'SQL' 카테고리의 다른 글

Leetcode - 262. Trips and Users  (0) 2023.12.06
Leetcode - 601. Human Traffic of Stadium  (0) 2023.11.04
정규 표현식  (0) 2023.10.20
Leetcode - 602. Friend Requests II: Who Has the Most Friends  (0) 2023.10.14
SQL 기타 - 주의할 점  (0) 2023.10.07