[문제] [조건] - 2022-04-13일에 취소되지 않은 예약건 이면서 - 'CS' 진료 내역을 조회 - 진료 예약 일시 오름차순 정렬
▶ 문제 해결 & 피드백 POINT : 조건을 적용할 테이블과 출력할 테이블이 다를 경우, 선 조인 후 쿼리 작성
[풀이 과정] 1. 조건 필터링 해줄 테이블 외 다른 테이블에서 출력해야 할 컬럼이 있으므로 테이블` join` 필요 →진료내역이 있는 환자와 의사이므로 `inner join` 사용
2. Appointment 테이블 조건에 맞춰 필터링 → 날짜 조건이 시분초까지 출력되므로 `date` 함수 활용하여 필터링
3. 컬럼출력 및 정렬 조건 확인
SELECT a.APNT_NO
,p.PT_NAME
,a.PT_NO
,a.MCDP_CD
,d.DR_NAME
,a.APNT_YMD
FROM APPOINTMENT a
INNER JOIN PATIENT p ON a.PT_NO =p.PT_NO
INNER JOIN DOCTOR d ON a.MDDR_ID =d.DR_ID
WHERE DATE(a.APNT_YMD)='2022-04-13'
AND a.MCDP_CD = 'CS'
AND a.APNT_CNCL_YN ='N'
ORDER BY a.APNT_YMD
2. 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기
▶ 문제 POINT : 조건문을 활용한 컬럼 생성
[문제] [조건] - 대여 가능 여부 조건별 컬럼 추가 생성 - 대여 가능 여부 날짜 조건 확인 ( - 정렬 조건 확인
▶ 문제 해결 & 피드백 POINT : 시작-끝 시각 컬럼이 있는 테이블에서 특정기간에 대여 or 포함되지 않는 조건 부여시 대소관계를 정확하게 파악해야 오류가 없음.
[풀이 과정] 1. 날짜 값 변환 → `date` 함수 활용
2. 2022-10-16에 대여중인 자동차 조건 확인 → 대여 시작일이 2022-10-16보다 작거나 같고, 반납일이 2022-10-16 보다 크거나 같다면 대여중인 상황 (=해당 일자가 대여 시작일 보다 빠르면서 반납일은 늦어야 대여중인 상황임)
3. 자동차id 기준으로 해당일자에 대여중이면 추가 대여 불가하므로 → `group by` 진행
4. 그룹바이 후 셀렉절(조건문) 집계 필요 → `max` 함수로 대여중 or 대여가능 중 가장 큰 값만 출력 (한글은 ㄱ~ㅎ 순으로 min~ max 임)
SELECT CAR_ID
,MAX(IF(DATE(Start_date)<='2022-10-16' AND DATE(end_date) >= '2022-10-16','대여중','대여 가능'))
AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC