- 2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.-- 2022년 1월 도서판매 데이터(where) -- 저자별, 카테고리별 매출액 합계 group by -- 기준(book) join(book_sales, author) SELECT a.author_id, c.author_name, a.category, sum(a.price*b.sales) TOTAL_SALES from book a left join book_sales b on a.book_id = b.book_id left join author c on a.author_id = c.author_id where date_format(b.sales_date, '%Y%m') = '202201' group by 1, 3 order by 1, 3 desc
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.
-- 대여시작일이 202208~202210 사이 -- 기간내 대여횟수 5회 이상 > 서브쿼리 car_id로 group by -- 월별 대여횟수 출력 month로 group by -- 대여횟수 0 은 제외 select month(start_date) MONTH, car_id, sum(total_count) RECORDS from ( SELECT car_id, count(car_id) total_count, start_date from CAR_RENTAL_COMPANY_RENTAL_HISTORY where start_date between '2022-08-01' and '2022-10-31' group by 1 ) a where total_count >= 5 group by 1, 2 order by 1, 2 desc오답이다. 서브쿼리에서 car_id로만 묶어 대여횟수를 계산했고 다음 쿼리에서 대여횟수의 합계를 구하는 식으로 진행했다.
정답에서는 where문에 서브쿼리를 이용하는데 group by의 조건인 having count 이용.--정답 참조 --where 절에 car_id의 횟수 >=5 와 8, 9, 10월의 조건을 먼저 넣어준다. --where and로 기간 조건 한번 더 기재 SELECT MONTH(START_DATE) MONTH, CAR_ID, COUNT(CAR_ID) RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' GROUP BY 1 HAVING COUNT(CAR_ID) >= 5) AND START_DATE BETWEEN '2022-08-01' AND '2022-10-31' GROUP BY 1, 2 HAVING COUNT(CAR_ID) >= 1 ORDER BY 1, 2 DESC