1. 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기
코딩테스트 연습 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 | 프로그래머스 스쿨 (programmers.co.kr) |
풀이 |
1. 같은 자동차의 대여-반납 기록이 여러개일 경우, START_DATE와 END_DATE를 기준으로 더 늦은 날짜인 기록을 기준으로 하기 위해 MAX를 사용한다. 1-1. 2022-10-16일을 넘는 대여기록이 없다면 대여 가능이 됨 2. CAR_ID를 기준으로 묶어준다. |
회고 |
- MAX를 이렇게 쓸수도 있군요,, 배워갑니다 - IF문 : IF (조건, 조건 충족시 결과, 조건 미충족시 결과) |
코드 (접은 글) |
더보기
SELECT CAR_ID, MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능' END) AVAILABILTY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
/*IF문 사용시*/
SELECT CAR_ID, IF (CAR_ID IN(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE), '대여중', '대여 가능')
AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
2. 있었는데요 없었습니다
코딩테스트 연습 - 있었는데요 없었습니다 | 프로그래머스 스쿨 (programmers.co.kr) |
풀이 |
1. 두 테이블 모두를 참고하기 위해 FROM에 두 테이블 다 입력한다. 2. 두 테이블의 ANIMAL_ID가 같고, 입양 시각보다 보호 시작일이 더 늦으면 조회 가능 3. 여러 번 출력되지 않도록 ANIMAL_ID로 묶어준다. |
회고 |
- WHERE절에서 기준을 잘 세워야 한다,,,,,,, ID같은 경우!! |
코드 (접은 글) |
더보기
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS, ANIMAL_OUTS
WHERE ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
AND ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
GROUP BY ANIMAL_INS.ANIMAL_ID
ORDER BY ANIMAL_INS.DATETIME
3. 오랜 기간 보호한 동물(1)
코딩테스트 연습 - 오랜 기간 보호한 동물(1) | 프로그래머스 스쿨 (programmers.co.kr) |
풀이 |
1. 아직 입양을 못 간 동물 중에서 찾는 것이므로, 외래키와 NOT IN 사용 1-1. 외래키이므로 ANIMAL_OUT 은 FROM에 쓰지 않아도 되는듯 2. 보호 시작일을 빠른 순으로 정렬해야 함 3. 조회에 제한을 둬야 하므로 LIMIT 3 |
회고 |
- 오름차순,,, 헷갈리지마!!!!!!!!!!!!!!!!!!!!! - LIMIT 조회에 제한 두기 |
코드 (접은 글) |
더보기
SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN
(SELECT ANIMAL_ID
FROM ANIMAL_OUTS)
ORDER BY DATETIME
LIMIT 3
4. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
코딩테스트 연습 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 | 프로그래머스 스쿨 (programmers.co.kr) |
풀이 |
1. 서브쿼리 1-1. 8~10월 중 1-2. CAR_ID로 묶음 1-3. HAVING COUNT(HISTORY_ID)>=5 2. 날짜를 8~10월 중으로 다시 제한한다. |
회고 |
- 서브쿼리 빡세네,, - HAVING 을 사용하면 몇회 이상 같은 조건을 사용하기 편리하다! |
코드 (접은 글) |
더보기
SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY CAR_ID
HAVING COUNT(HISTORY_ID) >= 5)
AND START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY MONTH, CAR_ID
ORDER BY MONTH, CAR_ID DESC
5. 없어진 기록 찾기
코딩테스트 연습 - 없어진 기록 찾기 | 프로그래머스 스쿨 (programmers.co.kr) |
풀이 |
1. ANIMAL_ID와 NAME을 찾되, INS에는 없고 OUTS에는 있는 기록을 찾아야 하므로 NOT IN활용 2. 중복출력을 방지하기 위해 GROUP BY ANIMAL_ID 3. 외래키가 있으므로 서브쿼리 밖의 FROM에 ANIMAL_INS를 쓰지 않아도 됨 |
회고 |
무난하게 풀었다 |
코드 (접은 글) |
더보기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN(SELECT ANIMAL_ID
FROM ANIMAL_INS)
GROUP BY ANIMAL_ID
ORDER BY ANIMAL_ID
'데이터베이스 > MySQL' 카테고리의 다른 글
[MySQL] 프로그래머스스쿨 연습문제 Lv.2 모음2 (0) | 2023.04.27 |
---|---|
[MySQL] 프로그래머스스쿨 연습문제 Lv.2 모음1 (0) | 2023.04.27 |
[MySQL] 데이터 타입 (0) | 2023.02.01 |