홍동이의 성장일기
[LeetCode] 1193. Monthly Transactions I (Date_format 날짜 함수) 본문
[LeetCode] 1193. Monthly Transactions I (Date_format 날짜 함수)
홍동2 2023. 12. 24. 11:33Monthly 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
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[LeetCode] 1341. Movie Rating (Union vs. Union All) (2) | 2024.01.03 |
---|---|
[LeetCode] 1204. Last Person to Fit in the Bus (누적합계 구하기) (1) | 2023.12.30 |
[LeetCode] 1174. Immediate Food Delivery II (집계함수에 조건 작성하기) (0) | 2023.12.22 |
[LeetCode] 1164. Product Price at a Given Date (조건에 따라 다른 값 부여하기) (0) | 2023.12.20 |
[LeetCode] 1158. Market Analysis I (JOIN에 AND 조건 사용하기) (0) | 2023.12.19 |