출처
문제
2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 카테고리명을 기준으로 오름차순 정렬해주세요.
문제에 대한 해석
문제의 목표는 2022년 1월의 카테고리 별 총 판매량을 구하는 것입니다.
풀이(MYSQL)
-- MYSQL
select b.category, sum(bs.sales) as TOTAL_SALES
from book b join book_sales bs on b.book_id = bs.book_id
year(bs.sales_date) = 2022 and where month(bs.sales_date) =1
group by b.category
order by b.category
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- FROM 절과 JOIN 절 : 책에 대한 정보 book테이블과 책판매에 대한 정보 book_sales을 book_id 를 기준으로 조인하여 책판매에 대한 정보와 해당 책에대한 정보를 볼 수 있도록 합니다.
- WHERE 절: year함수와 month함수를 통해 판매일자가 2022년이고 1월달인 책 판매정보만 필터링 합니다.
- GROUP BY 절: 카테고리에 따라 그룹화합니다. 이 단계는 카테고리별로 판매데이터를 모으는 과정입니다.
- SELECT 절: 그룹화된 데이터에 대해 카테고리와 카테고리별 총 판매액sum(bs.sales)을 계산합니다.
- ORDER BY절: 카테고리의 오름순으로 정렬합니다.
- 결과반환: 마지막으로 각 카테고리와 카테고리별 총 판매액이 담긴 결과가 반환됩니다.
다른사람 풀이
WITH TEMP AS (
SELECT BOOKID,SALES
, DATEFORMAT(SALESDATE, '%Y-%m') AS SALESDATE
FROM BOOKSALES
WHERE DATEFORMAT(SALESDATE, '%Y-%m') = "2022-01"
)
SELECT A.CATEGORY, SUM(B.SALES) AS TOTALSALES
FROM BOOK A
INNER JOIN TEMP B ON A.BOOKID = B.BOOKID
GROUP BY A.CATEGORY
ORDER BY 1
배운점
- 행이 적은 테이블과 행이 많은 테이블을 inner join했을때 조인한 기준별로 행이 많은 데이터에 행이 적인 데이터가 중복으로 입력된다-> 7개의 행이 있는 책정보 테이블과 200개가 넘는 책판매 테이블을 inner join 시에 book_id를 기준으로 책판매 행에 7개의 책 정보가 중복적으로 입력된다(단, book_id도 7개종류)
2. month(date)는 해당 날짜가 몇 월인지 알려준다. year(date)도 해당 날짜가 몇 년인지 알려준다. 이는 WHERE DATEFORMAT(SALESDATE, '%Y-%m') = "2022-01"로노 나타낼 수 있ㄷ다
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 오랜 기간 보호한 동물(2)-datediff (0) | 2024.01.05 |
---|---|
[문제풀이] 있었는데 없습니다-datediff (0) | 2024.01.05 |
[문제풀이] 상품별 오프라인 매출 구하기 - 다른사람 풀의 해석 필요 (1) | 2024.01.05 |
[문제풀이] 오랜 기간 보호한 동물(1) (1) | 2024.01.04 |
[Question] 서브쿼리와 JOIN-완 (0) | 2024.01.03 |