관리 메뉴

물 만날 물고기

[프로그래머스/MYSQL] - (17) 카테고리 별 도서 판매량 집계하기GROUP BY 본문

DB & SQL/프로그래머스

[프로그래머스/MYSQL] - (17) 카테고리 별 도서 판매량 집계하기GROUP BY

Lung Fish 2023. 7. 12. 03:33

🔍 예상 검색어

더보기

# 물만날물고기

# SQL

# 프로그래머스

# MYSQL

# 카테고리 별 도서 판매량 집계하기GROUP BY


해당 포스팅은 프로그래머스 MYSQL "카테고리 별 도서 판매량 집계하기GROUP BY" 문제에 대한 풀이를 정리하였습니다.

 

 

▶ 문제

코딩테스트 연습 - 카테고리 별 도서 판매량 집계하기 | 프로그래머스 스쿨
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

▶ 내 정답

-- 2022년 1월의 카테고리 별 도서 판매량을 합산하고, 
-- 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력
-- 결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES
FROM BOOK AS B
JOIN (SELECT *
FROM BOOK_SALES
-- WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 1
WHERE DATE_FORMAT(SALES_DATE,"%Y-%m") = "2022-01") AS S 
ON B.BOOK_ID = S.BOOK_ID
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY ASC;

 

▶ 다른 사람 정답

SELECT A.category, sum(sales) AS total_sales
FROM book A
INNER JOIN BOOK_SALES B ON A.book_id = B.book_id
WHERE B.SALES_DATE LIKE '2022-01%'
GROUP BY A.category
ORDER BY A.category;

 

▶ 다른 사람 정답 (2)

SELECT CATEGORY, SUM(s.SALES) AS TOTAL_SALES
FROM BOOK b, BOOK_SALES s
WHERE b.BOOK_ID = s.BOOK_ID AND SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY CATEGORY
ORDER BY CATEGORY ASC

 

▶ 다른 사람 정답 (3)

-- 코드를 입력하세요
SELECT A.category, SUM(B.sales)
FROM book A JOIN book_sales B
ON A.book_id = B.book_id
WHERE DATE_FORMAT(B.sales_date, '%Y-%m') = '2022-01'
GROUP BY A.category
ORDER BY A.category

 

▶ 다른 사람 정답 (4)

-- 코드를 입력하세요
SELECT B.CATEGORY, SUM(BS.SALES)
FROM BOOK AS B, BOOK_SALES AS BS
WHERE YEAR(BS.SALES_DATE) = '2022'
AND MONTH(BS.SALES_DATE) = '01'
AND BS.BOOK_ID = B.BOOK_ID
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY

 

▶ 다른 사람 정답 (5)

SELECT
    b.category, sum(bs.sales) as total_sales
from book b
left join book_sales bs on 
 b.book_id = bs.book_id 
where bs.sales_date between STR_TO_DATE('2022-01-01' ,'%Y-%m-%d') AND STR_TO_DATE('2022-01-31' ,'%Y-%m-%d')
group by b.category
order by b.category asc

 

▶ 총평 

내가 처음 이 문제를 보았을 때, "2022년 1월의 카테고리 별 도서 판매량" 조건의 WHERE절을 떠올리면서 서브쿼리로 먼져 가지를 쳐서 JOIN하자는 전략이 떠올랐는데, 다른 풀이들 보니까 그냥 FROM 절에 테이블 두개를 불러와서 WHERE절로 처리하는 방법으로 풀고 있었다. 후자가 당연히 쉽고 가독성도 좋은데 성능 부분에서 어떤게 더 좋은지 궁금하다. 성능도 평가할 수 있는 방법으로 학습을 진행해봐야겠다. 

 

▼ 참고자료

No. 내용 비고
1 my sql 쉬운답 | 프로그래머스 스쿨 haaaneeulll@gmail.com
2023.6.5 17:27
2 MYSQL / JOIN 구문 사용 안하고 GROUP BY로만 풀기 | 프로그래머스 스쿨 lyuhit
2023.4.5 21:31
3 mysql_정답! | 프로그래머스 스쿨 박상우
2023.2.27 19:16
4 애들아 형변환 하지마라 | 프로그래머스 스쿨 ghkdwls35@gmail.com
2023.2.27 11:25
5 - -

 

 

▼ 복습/히스토리

더보기
No. 복습일 비고
1    
2    
3    
4    
5    

- 작성코드

--