카테고리 없음
[LEETCODE] 1193. Monthly Transactions I SQL, if와 case
_maddy
2024. 6. 21. 17:41


# Write your MySQL query statement below
-- 월별, 국가별로 거래건수와 총액, 승인된 거래 건수와 총액을 찾는 sql 쿼리를 작성하세요.
SELECT
DATE_FORMAT(TRANS_DATE,"%Y-%m") AS MONTH,
COUNTRY,
COUNT(ID) AS TRANS_COUNT,
SUM(IF(STATE='APPROVED',1,0)) 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
DATE_FORMAT(TRANS_DATE,"%Y-%m"),
COUNTRY
ORDER BY 1
월별, 국가별로 거래건수와 총액, 승인된 거래 건수와 총액을 찾는 sql 쿼리를 구현하는 것이 문제!
별로 어려운 문제는 아니였지만 case 문과 if문의 null 처리 방식에 대해 공부하기 좋다.
NULL 처리:
- CASE 문에서 ELSE 절을 생략하면 조건이 모두 false인 경우 NULL이 반환
SELECT
CASE WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
END AS grade
FROM students;
이 경우, score가 70 미만인 학생의 grade 값은 NULL이 됩니다.
- IF 문에서 false_value를 생략하면 조건이 false인 경우 NULL이 반환
SELECT
IF(score >= 90, 'A',
IF(score >= 80, 'B',
IF(score >= 70, 'C')))
AS grade
FROM students;
- 이 경우, score가 70 미만인 학생의 grade 값은 NULL이 됩니다.
이와 같은 차이점 때문에, 상황에 따라 CASE 문 또는 IF 문을 선택할 때 NULL 처리에 대한 고려가 필요하다.
예를 들어, NULL 값을 특정 값으로 대체해야 하는 경우라면 ELSE 절 또는 false_value를 사용하여 명시적으로 처리해야한다.