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

이동규·2023년 3월 22일

문제 1

상위 N개 레코드

  • 이 문제에서는 제일 오래된 날짜를 찾는 문제로 MIN(DATETIME) 함수를 사용하면 되지만 만약 select 문에 사용하지 않고 where 절에 사용할 경우 [invalid use of group function] 오류가 나타난다. 이를 방지 하기 위해 subquery를 사용해야 한다.
select NAME from ANIMAL_INS
where DATETIME = (select MIN(DATETIME) from ANIMAL_INS)

문제 2

여러 기준으로 정렬하기

  • 이 문제의 경우 문제를 제대로 파악하지 못하여서 오답을 나타낸 문제이다.

문제 3

경기도에 위치한 식품창고 목록 출력하기

  • 이 문제의 경우 select 문에 IF() 함수를 사용해야 하는 문제로 SQL 속 IF문 사용 미숙으로 오답을 나타냈다.
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID

문제 4

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

  • 이 문제는 날짜 간의 차이를 구하여서 새로운 column을 생성하는 문제로 써보지 못한 함수를 작성해야 한다.
    • DATE_FORMAT
      • 문자 형식의 날짜를 실제 날짜 값으로 변경해주는 함수
      • ex) DATE_FORMAT(start_date, “%Y-%m-%d”)
      • “%Y-%m-%d” 이러한 입력에서 월을 대문자로 입력할 경우 영어로 출력이 된다.
    • DATEDIFF
      • 날짜 간의 차이를 구해주는 함수
      • ex) DATEDIFF(end_date, start_date)
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) < 29 THEN '단기 대여'
        ELSE '장기 대여' END) AS RENT_TYPE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09-%'
ORDER BY HISTORY_ID DESC

문제 5

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

  • 이 문제의 경우 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성하는 문제로 게시글 테이블과 댓글 테이블의 구분을 신중히 해야하는 문제이다. 그런데 WHERE 절을 작성하는 과정에서 댓글 작성일에 조건을 주는 것이 아닌 게시글 작성일에 조건을 걸어야 하는 트릭이 존재한다. 이에 대한 문제점을 찾아봐야 할 것 같다.
SELECT UGB.TITLE,
        UGR.BOARD_ID,
        UGR.REPLY_ID, 
        UGR.WRITER_ID,
        UGR.CONTENTS,
        SUBSTRING(UGR.CREATED_DATE, 1, 10) AS CREATED_DATE
    FROM USED_GOODS_REPLY AS UGR
LEFT JOIN USED_GOODS_BOARD AS UGB ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE UGB.CREATED_DATE LIKE '2022-10-%'
ORDER BY UGR.CREATED_DATE, UGB.TITLE

*이 문제 또한 DATE_FORMAT을 사용하여 풀 수도 있다.

profile
진짜 개발자가 되고 싶다

0개의 댓글