728x90
문제
https://leetcode.com/problems/monthly-transactions-i/?envType=study-plan-v2&envId=top-sql-50
- '년-월' 별, 나라 별 trans_count, approved_count, trans_amount, approved_total_amont 구하기
테이블
Transactions | id | country | state | amount | trans_date |
121 | US | approved | 1000 | 2025-12-18 | |
122 | US | declined | 2000 | 2025-12-19 | |
123 | US | approved | 2000 | 2025-01-01 | |
124 | DE | approved | 2000 | 2025-01-07 |
- 예를 들어, '2025-12'에 US는
- trans_count : 2개
- approved_count : 1개
- trans_total_amount : 3000
- approved_total_amount : 1000
풀이과정
▶ DATE_FORMAT(날짜, 형식) 사용 정답
# '년-월' 형식으로 month 조회하기
- trans_date에서 '년-월' 형식으로 날짜 데이터 추출
DATE_FORMAT(날짜, 형식)
형식 | 의미 | 형식 | 의미 |
%Y | 4자리 연도 | %y | 2자리 연도 |
%c | 한 자리 수 유지 ver. 월 | %m | 2자리 월 |
%M | 긴ver. 영문 월 | %b | 간소ver. 영문 월 |
%W | 긴ver. 영문 요일 | %a | 간소ver. 영문 요일 |
%e | 한자리 수 유지 일 | %d | 2자리 일 |
%H | 24시ver. 시간 | %l | 12시ver. 시간 |
%i | 분 | %S | 초 |
%T | hh:mm:ss | %r | hh:mm:ss AM, PM |
# 정답
- month와 country 별로 요구하는 컬럼 값 계산
1
2
3
4
5
6
7
8
|
SELECT DATE_FORMAT(trans_date, '%Y-%m') month,
country,
COUNT(*) trans_count,
SUM(IF(state='approved', 1, 0)) approved_count,
SUM(amount) trans_total_amount,
SUM(IF(state='approved', amount, 0)) approved_total_amount
FROM Transactions
GROUP BY month, country
|
cs |
다른 사람 풀이 참고
: '년-월' 형식의 month를 만드는 다양한 방식
▶ SUBSTRING(문자열, 시작자릿수, 개수) 사용 정답
# 정답
1
2
3
4
5
6
7
8
|
SELECT SUBSTRING(trans_date,1,7) as month,
country,
COUNT(state) as trans_count,
SUM(state='approved') as approved_count,
SUM(amount) as trans_total_amount,
SUM(IF(state='approved',amount,0)) as approved_total_amount
FROM Transactions
GROUP BY month, country;
|
cs |
▶ LEFT(문자열, 개수) 사용 정답
# 정답
1
2
3
4
5
6
7
8
|
SELECT LEFT(trans_date, 7) AS month,
country,
COUNT(id) AS trans_count,
SUM(state = 'approved') AS approved_count,
SUM(amount) AS trans_total_amount,
SUM((state = 'approved') * amount) AS approved_total_amount
FROM Transactions
GROUP BY month, country;
|
cs |
728x90
'데이터분석 과정 > SQL' 카테고리의 다른 글
MySQL 리트코드 | Game Play Analysis IV (DATE_ADD 함수, DATE_SUB 함수) (0) | 2025.04.02 |
---|---|
MySQL 리트코드 | Immediate Food Delivery Ⅱ (WHERE절 서브쿼리 활용) (0) | 2025.04.01 |
MySQL 리트코드 | Not Boring Movies (%, MOD함수) (0) | 2025.03.28 |
MySQL 리트코드 | Confirmation Rate (AVG 함수 내 조건문 사용법) (0) | 2025.03.27 |
MySQL 리트코드 | Average Time of Process per Machine (0) | 2025.03.19 |
댓글