홍동이의 성장일기

[LeetCode] 1193. Monthly Transactions I (Date_format 날짜 함수) 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 1193. Monthly Transactions I (Date_format 날짜 함수)

홍동2 2023. 12. 24. 11:33

 

Monthly Transactions I - LeetCode

Can you solve this real interview question? Monthly Transactions I - Table: Transactions +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | country | varchar | | state | enum | | amount | int | | trans_date | date

leetcode.com

 

SELECT DATE_FORMAT(trans_date, '%Y-%m') as month
        , country
        , COUNT(*) as trans_count
        , SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 end) as approved_count
        , SUM(amount) as trans_total_amount
        , SUM(CASE WHEN state = 'approved' THEN amount ELSE 0 end) as approved_total_amount
FROM transactions
GROUP BY month, country

 

💡 문제 풀이

 

이번 문제는 문제에서 원하는 'trans'가 무엇인지 파악하기 어려웠다. 그래서 예제를 순서대로 구현해나가면서 문제를 해결했다.

 

1️⃣ 먼저 date_format 함수를 이용해서 년-월만 뽑아주고 country를 가져온다. month와 country 둘 중 하나로만 group by를 하려고 하면 우리가 원하는 형태가 나오지 않는다. 월별로 group을 지어준 후, 그 안에서 country가 다른 경우는 또 따로 group을 지어주어야 하기 때문이다.

 

2️⃣ trans_count와 trans_total_amount는 비교적 간단하게 해결이 가능하다.

approved_~에 대해서는 별도의 조건 지정이 필요하다. CASE 구문을 사용하여 state가 approved인 조건을 지정해주고 필요한 집계를 해주면된다.

 

크게 어려운 문제는 아니지만 오랜만에 날짜 함수를 사용해서 글을 작성해보았다.

 

 

MYSQL 날짜 함수 참고하면 좋은 글

 

 

[mysql]날짜 관련 함수 모음

[mysql-함수]날짜 관련 함수 모음 dayofweek(date) 날짜를 한 주의 몇 번째 요일인지를 나타내는 숫자로 리턴한다. (1 = 일요일, 2 = 월요일, ... 7 = 토요일) mysql> select dayofweek('1998-02-03'); -> 3 weekday(date) 날

jang8584.tistory.com

 

728x90
Comments