오랑우탄의 반란
LeetCode 리트코드 | 1193. Monthly Transactions I (MySQL) 본문
반응형
오늘도 오랑이는 문제를 풉니다.
1193. Monthly Transactions I
풀이 과정
우선 간단한 조건부터 정리해서 써줍니다.
select date_format(trans_date ,'%Y-%m') as month, country,
count(id) as trans_count,
/*QUERY*/ as approved_count,
sum(amount) as trans_total_amount,
/*QUERY*/ as approved_total_amount
from transactions
group by 1, 2 ;
approved_count 와 approved_total_amount 는 각각 state = 'approved' 라는 조건이 필요한데, 전체 쿼리에 이걸 적용하게 되면 위에서 구한 trans_count, trans_total_amount 계산값과 동일해집니다.
그렇기 때문에 각각 case when 을 사용해서 맞다면 1 과 amount 를 리턴하도록 조건문을 달아줍니다.
조건문을 sum으로 묶어줘서 최종 개수와 합을 출력하도록 합니다.
sum(case when state = 'approved' then 1 else 0 end) as approved_count
sum(case when state = 'approved' then amount else 0 end) as approved_total_amount
최종 코드
select date_format(trans_date ,'%Y-%m') as month, country,
count(id) 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 1, 2 ;
다른 풀이도 살펴봅시다.
아래는 window function 을 사용한 풀이입니다.
window function을 잘 쓰지 않아 가물가물한데 다시 복습해야겠습니다.
#Approach 3-Window Function
SELECT
DATE_FORMAT(trans_date ,'%Y-%m') AS month,
country,
COUNT(id) AS trans_count,
SUM(amount) AS trans_total_amount,
CASE WHEN state = 'approved' THEN COUNT(id) OVER (PARTITION BY SUBSTR(trans_date, 1, 7), country) ELSE 0 END AS approved_count,
CASE WHEN state = 'approved' THEN SUM(amount) OVER (PARTITION BY SUBSTR(trans_date, 1, 7), country) ELSE 0 END AS approved_total_amount
FROM
Transactions;
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
https://leetcode.com/problems/monthly-transactions-i/description/
반응형
'SQL > LeetCode' 카테고리의 다른 글
LeetCode 리트코드 | 550. Game Play Analysis IV (MySQL) DATE_ADD/DATE_SUB 시간과 날짜 계산 (0) | 2024.07.11 |
---|---|
LeetCode 리트코드 | 1174. Immediate Food Delivery II (MySQL) (0) | 2024.07.11 |
LeetCode 리트코드 | 1251. Average Selling Price (MySQL) (0) | 2024.07.09 |
LeetCode 리트코드 | 1934. Confirmation Rate (MySQL) (0) | 2024.07.08 |
LeetCode 리트코드 | 570. Managers with at Least 5 Direct Reports (MySQL) (0) | 2024.07.08 |