Coding Planet

leetcode > 1141. User Activity for the Past 30 Days I 본문

SQL

leetcode > 1141. User Activity for the Past 30 Days I

jhj.sharon 2023. 2. 6. 20:50
반응형

✨ 문제

https://leetcode.com/problems/user-activity-for-the-past-30-days-i/description/

 

User Activity for the Past 30 Days I - LeetCode

User Activity for the Past 30 Days I - Table: Activity +---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | +---------------+---------+ There

leetcode.com

  • Write an SQL query to find the daily active user count for a period of 30 days ending 2019-07-27 inclusively. A user was active on someday if they made at least one activity on that day.

💻코드

SELECT TO_CHAR(ACTIVITY_DATE,'YYYY-MM-DD') AS DAY
        , COUNT(DISTINCT USER_ID) AS ACTIVE_USERS
FROM ACTIVITY
WHERE ACTIVITY_DATE < '2019-07-27' 
    AND TO_DATE('2019-07-27','YYYY-MM-DD') - ACTIVITY_DATE < 30
GROUP BY ACTIVITY_DATE

 

👩‍💻 풀이 방법

  • Activity 테이블에서 USER_ID가 duaplicate할 수 있다는 힌트를 파악해야한다.
  • 문제 풀이를 위해서는 1) 활동 유저의 아이디를 중복 없이 보여주는 것 2) 2019-07-27을 포함한 30일 이전 활동만을 포함해야한다는 것, 이상의 두 조건을 충족해야한다.
  • 1) DISTINCT를 통해 USER_ID를 중복되지 않게 표현한다.
  • 2) 오라클에서는 MySQL과는 다르게 DATEDIFF함수를 지원하지 않으므로 날짜차이를 출력하기 위해서는
  • 종료일자(YYYY-MM-DD) - 시작일자(YYYY-MM-DD) 형식을 사용해야한다.

🔔 느낀점

  • leetcode 문제의 경우 요구하는 테이블 형식을 example로 보여주기 때문에 컬럼명이나 데이터 표현식을 잘 살펴봐야겠다.
  • leetcode의 solutions들은 MySQL이 압도적이다. 왜 그럴까?
반응형
Comments