sql_코드카타(2023.12.29) having count

김수경·2023년 12월 28일

코드카타

목록 보기
11/29
  1. 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 
  1. 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 
profile
잘 하고 있는겨?

0개의 댓글