참고: https://school.programmers.co.kr/learn/courses/30/lessons/157342 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 조건을 보고나서 떠오른 풀이 방법은 다음과 같다. 1) 평균 대여 기간은 DATEDIFF 함수를 사용하여 날짜의 차이를 CAR_ID 별로 모두 더한 값에서 CAR_ID의 갯수로 나눈 값이 된다. 2) GROUP BY 절로 CAR_ID의 중복을 제거하고, HAVING 조건으로 앞서 만든 평균 대여 기간의 7 이상인 값만 가져온다. 3) 평균 대여 기간과 자동차 ID를 ORDER BY DESC로 내림차순 정렬한다. SELECT CAR_ID, ROUND(SUM(DATEDIFF(END_DATE, START_DATE)+1)/COUNT(CAR_ID),..
참고: https://school.programmers.co.kr/learn/courses/30/lessons/157340 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 GROUP BY 문제가 새롭게 추가되었길래, 바로 풀어보았다. START_DATE와 END_DATE 사이에 2022-10-16이 있는 경우에 CAR_ID 별로 대여가 가능한지, 대여중인지를 판단해야하고, 자동차 ID를 기준으로 내림차순 정렬을 해야한다. WITH NEW as ( SELECT CAR_ID as NEW_CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE DATE_FORMAT(START_DATE, '%Y-%m-%d') < '2022-10-17' AND DATE_FORMAT(END_DATE,..
참고: https://school.programmers.co.kr/learn/courses/30/lessons/151141 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예시는 다음과 같다. 중간에 있는 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 트럭에 해당하는 자동차 대여 기록의 요금과 대여 기간과 할인율을 각각 뽑아서 대여 기간에 따른 할인이 적용된 가격은 얼마인가에 대해서 출력하는 문제이다. 1) CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_CAR을 조인하여 대여 기록 ID와 요금, 대여 기간의 차이 뽑기 2) 뽑은 각 컬럼에 대해서 할인율과 대여 기간에 따른 요금에 곱셈을 진행하고 조건에 맞게 분리하기 WITH N..
참고: https://school.programmers.co.kr/learn/courses/30/lessons/132204 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 예시를 보게 되면, 예약 일시가 2022-04-13인 환자들 중 흉부외과(CS)의 진료 내역을 출력해야한다. 1) PT_NAME과 DR_NAME이 APPOINTMENT 테이블에 없으므로 JOIN 2) APNT_YMD가 '2022-04-13'인 조건 생성 3) MCDP_CD가 'CS'인 조건 생성 4) 예약이 취소되지 않은 APNT_CNCL_YN이 'Y'가 아닌 조건 생성 SELECT A.APNT_NO, B.PT_NAME, A.PT_NO, A.MCDP_CD, C.DR_NAME, A.APNT_YMD FROM APPOINTMENT A JOIN P..
참고: https://school.programmers.co.kr/learn/courses/30/lessons/131113 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 처음 문제를 봤을 때는 출고미정을 보지 못하고 IF문을 생각했었다. 하지만, 문제를 잘 읽고 예제를 보니 OUT_DATE가 NULL인 경우에 출고미정 이라는 문자로 처리해야한다는 것을 알게 됐다. 그리하여 IF문이 아닌 CASE WHEN THEN ELSE END 문을 사용하기로 했다. SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') as OUT_DATE, CASE WHEN OUT_DATE IS NULL THEN '출고미정' WHEN DATE_FORMAT(OUT_DATE, '%Y..
참고: https://school.programmers.co.kr/learn/courses/30/lessons/59411 ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 다음과 같이 주어진 예시를 확인해보면 OUTS 테이블에서 INS 테이블을 뺀 시간의 길이가 가장 긴 즉, 입양을 보내기까지의 보호 기간이 가장 긴 동물 두 마리의 아이디와 이름을 조회하면 된다. SELECT ANIMAL_ID, NAME FROM ( SELECT B.ANIMAL_ID, B.NAME, DATEDIFF(B.DATETIME, A.DATETIME) as DATE FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID ORDER BY DATE DESC LIMIT 2) as N..