코딩 문제풀이 | 프로그래머스 | MySQL | “String, Date”

isitcake_yes·2023년 2월 11일
0

코딩문제풀이

목록 보기
5/6
post-thumbnail

String, Date

🌼 Lv1

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

Q. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

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 YEAR(start_date)=2022 AND MONTH(start_date)=9
ORDER BY history_id DESC;

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

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

SELECT * FROM car_rental_company_car 
WHERE  options LIKE "%네비게이션%"
ORDER BY car_id DESC; 

🌼🌼 Lv2

이름에 el이 들어가는 동물 찾기

Q. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.

SELECT animal_id, name FROM animal_ins 
WHERE name LIKE "%EL%" AND animal_type="Dog" ORDER BY name;

중성화 여부 파악하기

Q. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT animal_id, name, 
CASE WHEN sex_upon_intake LIKE "%Neutered%" OR sex_upon_intake LIKE "%Spayed%" THEN "O"
ELSE "X"
END AS "중성화"
FROM animal_ins
ORDER BY animal_id; 
SELECT animal_id, name, 
IF(sex_upon_intake REGEXP 'Neutered|Spayed', 'O', 'X') AS 중성화
FROM animal_ins 
ORDER BY animal_id;

루시와 엘라 찾기

Q. 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

SELECT animal_id, name, sex_upon_intake
FROM animal_ins
WHERE name IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY animal_id;

카테고리 별 상품 개수 구하기

Q. PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

SELECT LEFT(product_code, 2) AS category, COUNT(product_id) AS products 
FROM product GROUP BY category ORDER BY category;

DATETIME에서 DATE로 형 변환

Q. ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

SELECT animal_id, name, DATE_FORMAT(datetime, "%Y-%m-%d") AS "날짜" 
FROM animal_ins ORDER BY animal_id;

자동차 평균 대여 기간 구하기

Q. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.

SELECT car_id, ROUND(AVG(DATEDIFF(end_date, start_date)+1),1) AS average_duration 
FROM car_rental_company_rental_history
GROUP BY car_id HAVING average_duration >= 7
ORDER BY 2 DESC, 1 DESC;

🌼🌼🌼 Lv3

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

Q. 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

SELECT O.animal_id, O.name FROM animal_ins I 
INNER JOIN animal_outs O 
ON I.animal_id=O.animal_id 
ORDER BY DATEDIFF(O.datetime, I.datetime) DESC LIMIT 2;

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

Q. FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

SELECT order_id, product_id, DATE_FORMAT(out_date, "%Y-%m-%d") AS out_date,
CASE WHEN out_date > "2022-05-01" THEN "출고대기"
WHEN out_date <= "2022-05-01" THEN "출고완료" ELSE "출고미정" END AS "출고여부"
FROM food_order ORDER BY order_id;

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

Q. CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.

SELECT DISTINCT H.car_id FROM car_rental_company_rental_history H 
LEFT JOIN car_rental_company_car C 
ON H.car_id = C.car_id 
WHERE car_type="세단" AND DATE_FORMAT(start_date,"%Y-%m")="2022-10" 
ORDER BY H.car_id DESC;

🌼🌼🌼🌼 Lv4

자동차 대여 기록 별 대여 금액 구하기

Q. CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

SELECT HC.history_id, 
		ROUND(HC.daily_fee * (DATEDIFF(HC.end_date,HC.start_date)+1) * IFNULL(1-DP.discount_rate * 0.01, 1)) AS fee 
FROM 
	(SELECT H.history_id, H.start_date, H.end_date, C.daily_fee, C.car_type, 
    CASE WHEN DATEDIFF(end_date,start_date)+1 >=90 THEN "90일 이상" 
    WHEN DATEDIFF(end_date,start_date)+1 >=30 THEN "30일 이상" 
    WHEN DATEDIFF(end_date,start_date)+1 >=7 THEN "7일 이상" END AS diff 
    FROM car_rental_company_rental_history H 
    LEFT JOIN car_rental_company_car C 
    ON H.car_id=C.car_id 
    WHERE C.car_type="트럭"
) HC 
LEFT JOIN car_rental_company_discount_plan DP 
ON HC.diff=DP.duration_type AND DP.car_type="트럭" 
ORDER BY fee DESC, history_id DESC;

취소되지 않은 진료 예약 조회하기

Q. 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 P 
RIGHT JOIN appointment A ON P.pt_no = A.pt_no 
LEFT JOIN doctor D ON A.mddr_id = D.dr_id 
WHERE DATE_FORMAT(apnt_ymd,"%Y-%m-%d")="2022-04-13" 
AND apnt_cncl_yn="N"
AND A.mcdp_cd="CS"
ORDER BY apnt_ymd;
profile
주니어 개발자 주니어발록 주니어예티 주니어레이스

0개의 댓글