[MySQL] 프로그래머스 문제 연습 12

Lake·2024년 5월 3일
0

SQL 문제

목록 보기
15/36
post-thumbnail

특정 옵션이 포함된 자동차 리스트 구하기 (STRING, DATE)

  • CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

제출한 쿼리 :

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

조건에 부합하는 중고거래 상태 조회하기()

  • USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

제출한 쿼리 :

SELECT BOARD_ID
       , WRITER_ID
       , TITLE
       , PRICE
       , CASE WHEN `STATUS` = 'SALE' THEN '판매중'
              WHEN `STATUS` = 'RESERVED' THEN '예약중'
              WHEN `STATUS` = 'DONE' THEN '거래완료'
         END AS `STATUS`
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

취소되지 않은 진료 예약 조회하기 (STRING, DATE)

  • PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

제출한 쿼리 :

SELECT A.APNT_NO
       , P.PT_NAME
       , P.PT_NO
       , A.MCDP_CD
       , D.DR_NAME
       , A.APNT_YMD
FROM PATIENT AS P 
INNER JOIN APPOINTMENT AS A ON P.PT_NO = A.PT_NO
INNER JOIN DOCTOR AS D ON D.DR_ID = A.MDDR_ID
WHERE A.MCDP_CD = 'CS'
    AND A.APNT_CNCL_YN = 'N'
    AND DATE_FORMAT(APNT_YMD, '%Y-%m-%d') = '2022-04-13'
ORDER BY APNT_YMD;

자동차 대여 기록에서 대여중 / 대여 가능 구분하기 (GROUP BY)

  • CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

제출한 쿼리 :

SELECT CAR_ID, 
       MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중' 
                ELSE '대여 가능' 
           END) AS "AVAILABILITY"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

하나의 자동차에 대해 여러 개의 대여 이력이 있을 때, 각 대여 이력에 대한 시작일과 종료일이 다를 수 있기 때문에 가장 최근 날짜를 조회하기 위해 CASE문 앞에 MAX()를 썼다.


년, 월, 성별 별 상품 구매 회원 수 구하기 (GROUP BY)

  • USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

제출한 쿼리 :

SELECT DATE_FORMAT(O.SALES_DATE, "%Y") AS "YEAR"
       , DATE_FORMAT(O.SALES_DATE, "%m") AS "MONTH"
       , U.GENDER
       , COUNT(DISTINCT U.USER_ID) USERS
FROM ONLINE_SALE AS O 
INNER JOIN USER_INFO AS U
    ON O.USER_ID = U.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, U.GENDER
ORDER BY YEAR, MONTH, U.GENDER

오늘의 TMI

드디어 금요일!!! 단순히 금요일 이라는 사실 하나만으로 기분이 좋아진다ㅋㅋㅋ(사실 목요일을 더 좋아함)
내일이랑 모레 어버이날 기념 가족들 모임(?) 있긴 한데 안갈거임ㅋ
집에서 쉬면서 공부나 해야지

0개의 댓글