[프로그래머스] MYSQL LEVEL 3 (1~6)

Hyeon·2024년 9월 20일

SQL 문제 풀이

목록 보기
9/61

LEVEL 3 시작..

LEVEL 2 의 마지막 부분보다 훨씬 쉬운 부분
LEVEL 2은 서브쿼리와 비트 연산자로 오답 내기가 쉬워서 '서브 쿼리'방식에 대해 다시 한번
공부해봐야할 듯!

🚩오늘의 문제는?

SQL - level 3

1.카테고리 별 도서 판매량 집계하기
2.조건별로 분류하여 주문상태 출력하기
3.오랜 기간 보호한 동물(1)
4.있었는데요 없었습니다
5.오랜 기간 보호한 동물(2)
6.대여 기록이 존재하는 자동차 리스트 구하기

1.카테고리 별 도서 판매량 집계하기

문제 설명

문제 풀이

실패

SELECT NEW_T.CATEGORY, NEW_T.TOTAL_SALES
FROM (SELECT YEAR(B.SALES_DATE) AS YEAR,MONTH(B.SALES_DATE) AS MONTH, SUM(B.SALES) AS TOTAL_SALES, A.CATEGORY
FROM BOOK A JOIN BOOK_SALES B
WHERE A.BOOK_ID = B.BOOK_ID
GROUP BY A.CATEGORY
HAVING YEAR=2022 AND MONTH=1) AS NEW_T
ORDER BY NEW_T.CATEGORY;

성공

SELECT A.CATEGORY , SUM(B.SALES) AS TOTAL_SALES
FROM BOOK A JOIN BOOK_SALES B
ON A.BOOK_ID = B.BOOK_ID
WHERE B.SALES_DATE LIKE ('%2022-01%')
GROUP BY A.CATEGORY
ORDER BY 1;

주의할 점

  • HAVING 절을 사용할 때 이미 그룹핑된 이후기 때문에 값을 선택할 수 없다.
    SELECT 절에서 AS 을 통해 원하는 값을 출력한다음에 HAVING 절에서 컬럼을 대입하면 된다.
  • 이 문제는 가볍게 서브쿼리없이 ORDER BY와 GROUP BY을 통해 진행할 수 있는 문제다..!

참고자료
https://easyitwanner.tistory.com/274 https://www.codeit.kr/community/questions/UXVlc3Rpb246NjI2NGQzNGY1ZTUyODQyZTQ4YTdmZjhi)

2.조건별로 분류하여 주문상태 출력하기

문제 설명

문제 풀이

SELECT ORDER_ID	,PRODUCT_ID	,DATE_FORMAT(OUT_DATE,'%Y-%m-%d') AS OUT_DATE,
CASE WHEN OUT_DATE IS NULL THEN '출고미정'
WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
ELSE '출고대기' END AS 출고여부
FROM FOOD_ORDER 
ORDER BY ORDER_ID ASC;

주의할 점

  • 특정 날짜 기준 이전 이후( 컬럼 < '2022-01-01' 다음과 같은 방식으로 진행하기)

3.오랜 기간 보호한 동물(1)

문제 설명

문제 풀이

SELECT A.NAME	, A.DATETIME
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS  NULL
ORDER BY A.DATETIME ASC LIMIT 3;

주의할 점

아직 입양을 못간 아이들이므로, 입양 보낸 정보가 담겨있지 않은 B.ANIMAL_ID가 NULL값인 경우
해당 컬럼을 추출하는 문제이다.

4.있었는데요 없었습니다

문제 설명

문제풀이

SELECT A.ANIMAL_ID ,A.NAME 
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME 
GROUP BY ANIMAL_ID
ORDER BY A.DATETIME ASC;

주의할 점

  • 보호시작일을 기준으로 해야함.-> 보호시작일 컬럼이 있는 ANIMAL_INS & 입양일 컬럼이 있는
    ANIMAL_OUTS -> ANIMAL_INS 테이블을 기준으로 ORDER BY 진행하기

5.오랜 기간 보호한 동물(2)

문제 설명

문제 풀이

SELECT A.ANIMAL_ID , A.NAME
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NOT NULL
ORDER BY (B.DATETIME-A.DATETIME)DESC LIMIT 2;

6.대여 기록이 존재하는 자동차 리스트 구하기

문제 설명

문제 풀이

SELECT DISTINCT(B.CAR_ID)
FROM CAR_RENTAL_COMPANY_CAR A JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B
ON A.CAR_ID = B.CAR_ID
WHERE A.CAR_TYPE='세단' AND B.START_DATE LIKE '%2022-10%'
ORDER BY CAR_ID DESC;

0개의 댓글