꿈은 데이터분석가, 취미는 계획

[MY SQL] 전체 거래수와 금액, 승인된 거래수와 금액 같이 조회하기 본문

카테고리 없음

[MY SQL] 전체 거래수와 금액, 승인된 거래수와 금액 같이 조회하기

data_2080 2024. 8. 8. 16:34
728x90

 

출처: [Leetcode - SQL50] : 1193. Monthly Transactions

링크: https://leetcode.com/problems/monthly-transactions-i/description/?envType=study-plan-v2&envId=top-sql-50

문제(일부):  월별, 나라별로 거래수와 거래금액, 승인된 거래수와 거래금액


1. CASE WHEN구문 활용

0) 월별 나라별로 거래수와 거래금액, "승인된"필터링 조건의 거래수와 거래금액을 같이 조회해야 함
1) 월별, 나라별로 보기 위해 group by를 사용
2) 전체 거래수와 거래금액은 집계함수를 사용
3) CASE WHEN구문으로 승인된 거래수와 거래금액을 각각 조회하는 컬럼 생성
    =>  거래수를 계산할 때

          SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END) AS 'approved_count' 사용
    => 가장 처리속도가 빠른 답 확인 시
          COUNT(CASE WHEN STATE ='APPROVED' THEN 1 ELSE NULL END) AS 'approved_count' 사용
    =>  SUM은 계산하는데 시간이 더 많이 사용되고, COUNT와 NULL을 사용하여 처리속도가 빨라짐   

SELECT DATE_FORMAT(trans_date,'%Y-%m') AS month 
        ,country
        ,COUNT(id) AS trans_count  
        ,COUNT(CASE WHEN STATE ='APPROVED' THEN 1 ELSE NULL END) AS 'approved_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 country, month
728x90