Lv4. 저자 별 카테고리 별 매출액 집계하기 (MySQL)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/144856
내가 작성한 코드
-- 풀이1
-- 2022년 1월 도서 판매량
WITH SALES_202201 AS (
SELECT BOOK_ID, SUM(SALES) AS TOTAL_COUNT -- 1월 총 판매량
FROM BOOK_SALES
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY BOOK_ID
)
SELECT B.AUTHOR_ID
,A.AUTHOR_NAME
,B.CATEGORY
,SUM(S.TOTAL_COUNT * B.PRICE) AS TOTAL_SALES
FROM SALES_202201 S
JOIN BOOK B
ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
GROUP BY B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY
ORDER BY B.AUTHOR_ID ASC, B.CATEGORY DESC;
-- 풀이2
SELECT B.AUTHOR_ID
,A.AUTHOR_NAME
,B.CATEGORY
,SUM(S.SALES * B.PRICE) AS TOTAL_SALES
FROM BOOK_SALES S
JOIN BOOK B
ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE DATE_FORMAT(S.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY
ORDER BY B.AUTHOR_ID, B.CATEGORY DESC;
Oracle
-- 2022년 1월 도서 판매량
WITH SALES_202201 AS (
SELECT BOOK_ID, SUM(SALES) AS TOTAL_COUNT -- 1월 총 판매량
FROM BOOK_SALES
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM') = '2022-01'
GROUP BY BOOK_ID
)
SELECT B.AUTHOR_ID
,A.AUTHOR_NAME
,B.CATEGORY
,SUM(S.TOTAL_COUNT * B.PRICE) AS TOTAL_SALES
FROM SALES_202201 S
JOIN BOOK B
ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
GROUP BY B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY
ORDER BY B.AUTHOR_ID ASC, B.CATEGORY DESC;
문제 회고
1. 날짜 처리 방식의 차이
- MySQL : DATE_FORMAT(날짜, '%Y-%m-%d')
- 구분자를 자유롭게 넣을 수 있다(-, /, .)
- Oracle : TO_CHAR(날짜, 'YYYY-MM-DD')
- YYYY는 4자리, YY는 2자리, MON은 약어 월(JAN, FEB.. )등 예약어가 다양하다
- 데이터가 많을 때는 함수를 쓰는 대신 날짜 범위를 직접 비교하는 것이 성능상 유리하다
- WHERE SALES_DATE >= '2022-01-01' AND SALES_DATE < '2022-02-01'
'코딩테스트' 카테고리의 다른 글
| [26.04.01 코테/회고(MySQL)]-조건에 맞는 사원 정보 조회하기 (0) | 2026.04.01 |
|---|---|
| [26.03.31 코테/회고(MySQL)]-언어별 개발자 분류하기 (0) | 2026.03.31 |
| [26.03.27 코테/회고(MySQL)]-부모의 형질을 모두 가지는 대장균 찾기 (0) | 2026.03.27 |
| [26.03.26 코테/회고(MySQL/Oracle)]-입양 시각 구하기(2) (0) | 2026.03.26 |
| [26.03.25 코테/회고(MySQL/Oracle)]-입양 시각 구하기(1) (0) | 2026.03.25 |