프로그래머스 문제풀이/SQL (MYSQL)

[MYSQL] 프로그래머스 SQL 문제풀이 - Level 1 (19~24번 문제풀이) - 1단계 모든 문제풀이 완료

남건욱 2023. 11. 16. 17:26
반응형
19. 과일로 만든 아이스크림 고르기

문제

SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF
JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE FIRST_HALF.TOTAL_ORDER >= 3000
AND ICECREAM_INFO.INGREDIENT_TYPE = 'fruit_based'
ORDER BY FIRST_HALF.TOTAL_ORDER DESC

<작성한 코드>

FIRST_HALF 테이블에서 FLAVOR 칼럼을 조회했다. ICECREAM_INFO 테이블과 조인을 해줬고 조건은 두 개의 FLAVOR가 일치한다는 조건이다. 추가로 FIRST_HALF의 TOTAL_ORDER칼럼이 3000 이상이고 ICECREAM_INFO의 INGREDIENT_TYPE이 fruit_based 인 것만 조회하도록 했다. 정렬은 FIRST_HALF의 TOTAL_ORDER 칼럼을 기준으로 내림차순으로 정렬했다.

 

 

 

20. 조건에 맞는 도서 리스트 출력하기

문제

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d')
FROM BOOK
WHERE PUBLISHED_DATE LIKE '2021%'
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE

<작성한 코드>

BOOK테이블에서 필요한 정보를 조회했다. 날짜 타입을 맞춰주기위해 DATE_FORMAT을 사용하고 % Y-%m-%d 형식으로 출력했다. 조건은 PUBLISHED_DATE 값이 2021로 시작하고 CATEGORY가 인문인 것들만 조회했다. 정렬은 PUBLISHED_DATE를 기준으로 오름차순으로 정렬했다.

 

 

 

21. 평균 일일 대여 요금 구하기

문제

SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'

<작성한 코드>

CAL_RENTAL_COMPANY_CAR 테이블에서 정보를 조회 해야되는 상황이다. 평균을 구해야 하고 소수 첫 번째 자리에서 반올림해야 하기 때문에 ROUND를 사용해서 DAILY_FEE의 평균에 0을 넣어줘서 소수점이 없도록 했다. 그리고 별칭은 AVERAGE_FEE로 해줬다. 조건은 CAR_TYPE이 SUV인 것들만 조회하도록 했다.

 

 

 

22. 자동차 대여 기록에서 장기/단기 대여 구분하기

문제

SELECT HISTORY_ID,
    CAR_ID,
    DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
    DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
        CASE WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 30 THEN '장기 대여' ELSE '단기 대여'
        END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC

<작성한 코드>

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 데이터를 조회 했다. HISTORY_ID, CAR_ID는 그대로 사용했고 START_DATE, END_DATE는 형식을 변환해줘야 하기 때문에 DATE_FORMAT을 사용해서 % Y-%m-%d 형식으로 맞췄다. 그 뒤 RENT_TYPE을 만들어줘야 하기 때문에 CASE문을 사용했고 DATEDIFF를 사용해서 날짜 계산을 했다. +1을 해준 이유는 마지막 날짜가 포함되지 않기 때문에 +1을 해줬다. 만약 이 차이가 30을 넘으면 '장기 대여' 값을 넣어주고 아니라면 '단기 대여' 값을 넣어줬다. 조건은 START_DATE가 2022-09로 시작하는 값들만 조회했고 정렬은 HISTORY_ID를 기준으로 내림차순으로 정렬했다.

 

 

23. 특정 옵션이 포함된 자동차 리스트 구하기

문제

SELECT * 
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC

<작성한 코드>

CAR_RENTAL_COMPANY_CAR 테이블에서 모든 정보를 조회하였고, 조건은 OPTIONS에 네이게이션이 들어있어야 한다. 정렬은 CAR_ID를 기준으로 내림차순으로 정렬하였다.

 

 

 

24. 조건에 부합하는 중고거래 댓글 조회하기

문제

SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS,
       DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD B 
JOIN USED_GOODS_REPLY R ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%' 
ORDER BY R.CREATED_DATE, B.TITLE

<작성한 코드>

조인을 사용했다. USED_GOODS_BOARD를 B로 별칭, USED_GOODS_REPLY을 R로 별칭해줬다. 조건은 B의 BOARD_ID와 R의 BOARD_ID가 같은 경우이다. 조회는 문제에서 출력하는 요구사항에 맞춰 조회해왔고, 조건은 B의 CREATED_DATE가 2022-10으로 시작하는 경우에 조회해 왔다. 정렬은 R의 CREATED_DATE를 기준으로 오름차순으로 정렬하였고, 동일하다면 B의 TITLE을 기준으로 오름차순으로 정렬하였다.

반응형
프로필사진

남건욱's 공부기록