67. 저자 별 카테고리 별 매출액 집계하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/144856

정답 코드:

SELECT
    A.AUTHOR_ID,
    A.AUTHOR_NAME,
    B.CATEGORY,
    SUM(BS.SALES * B.PRICE) AS TOTAL_SALES
FROM BOOK B
INNER JOIN BOOK_SALES BS
ON B.BOOK_ID = BS.BOOK_ID
INNER JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 1
GROUP BY A.AUTHOR_ID, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, CATEGORY DESC

문제 풀이때 했던 생각.

# 2022년 1월의 도서 판매 데이터를 기준 
# 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여,
# 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력
# 결과는 저자 ID 오름차순, 카테고리 내림차순 정렬


1) 2022년 1월의 도서 판매 데이터를 기준 
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 1

2)저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가)
SUM(BS.SALES * B.PRICE) AS TOTAL_SALES
GROUP BY A.AUTHOR_ID, B.CATEGORY
# AUTHOR_ID로 묶는 이유는 저자중 동명이인이 있을수 있기 때문

다음엔 WHERE 절로 풀어보기

 


69. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

 

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/151139

정답 코드:

SELECT
    MONTH(h.START_DATE) AS MONTH,
    h.CAR_ID,
    COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
WHERE h.START_DATE >= '2022-08-01'
  AND h.START_DATE <  '2022-11-01'
  AND h.CAR_ID IN (
      SELECT CAR_ID
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
      WHERE START_DATE >= '2022-08-01'
        AND START_DATE <  '2022-11-01'
      GROUP BY CAR_ID
      HAVING COUNT(*) >= 5
  )
GROUP BY MONTH(h.START_DATE), h.CAR_ID
ORDER BY MONTH ASC, h.CAR_ID DESC;

 

문제 풀이때 했던 생각.

# 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차
# 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외
# 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력
# 결과는 월을 기준으로 오름차순, 자동차 ID를 기준으로 내림차순

# ‘대상 자동차’만 뽑기 (기간 전체 기준 집계)
SELECT CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
GROUP BY CAR_ID
HAVING COUNT(*) >= 5

# 월별 + 자동차별 RECORDS 계산
SELECT CAR_ID, MONTH(START_DATE), COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE START_DATE >= '2022-08-01' AND START_DATE <  '2022-11-01'
GROUP BY MONTH(START_DATE), CAR_ID


이번엔 WHERE 절 서브쿼리로 문제를 풀이했으나
다음엔 FROM절 서브쿼리로 문제 풀기 도전해보기

 


70. 그룹별 조건에 맞는 식당 목록 출력하기

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/131124

정답 코드:

SELECT
    mp.MEMBER_NAME,
    rr.REVIEW_TEXT,
    DATE_FORMAT(rr.REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
FROM MEMBER_PROFILE mp
INNER JOIN REST_REVIEW rr
    ON mp.MEMBER_ID = rr.MEMBER_ID
WHERE mp.MEMBER_ID = (
    SELECT MEMBER_ID
    FROM REST_REVIEW 
    GROUP BY MEMBER_ID
    ORDER BY COUNT(*) DESC
    LIMIT 1 )
ORDER BY rr.REVIEW_DATE ASC, rr.REVIEW_TEXT ASC

문제 풀이때 했던 생각.

# 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회
# 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력
# 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 텍스트를 기준으로 오름차순

1) 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회
SELECT MEMBER_ID
FROM REST_REVIEW 
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
LIMIT 1

 


 

WHERE절 서브쿼리

FROM 절 서브쿼리 문제 풀이 능력이 떨어지니 집중적으로 공부 다시하기

'E.코드카타 > Level 5' 카테고리의 다른 글

코드카타 Level.5 76  (0) 2026.02.06
코드카타 Level.5 74, 75  (0) 2026.02.05
코드카타 Level.5 71~73  (1) 2026.01.22

+ Recent posts