취업준비/코딩테스트 문제 풀이

[프로그래머스 SQL 코딩테스트 연습] Lv4. 취소되지 않은 진료 예약 조회하기 (MySQL)

상급닌자연습생 2024. 6. 12. 23:52

🤔 문제

다음은 환자 정보를 담은 `PATIENT` 테이블과 의사 정보를 담은 `DOCTOR` 테이블, 그리고 진료 예약목록을 담은 `APPOINTMENT`에 대한 테이블입니다. `PATIENT` 테이블은 다음과 같으며 `PT_NO`, `PT_NAME`, `GEND_CD`, `AGE`, `TLNO`는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.

`DOCTOR` 테이블은 다음과 같으며 `DR_NAME`, `DR_ID`, `LCNS_NO`, `HIRE_YMD`, `MCDP_CD`, `TLNO`는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.

`APPOINTMENT` 테이블은 다음과 같으며 `APNT_YMD`, `APNT_NO`, `PT_NO`, `MCDP_CD`, `MDDR_ID`, `APNT_CNCL_YN`, `APNT_CNCL_YMD`는 각각 진료 예약일시, 진료예약번호, 환자번호, 진료과코드, 의사ID, 예약취소여부, 예약취소날짜를 나타냅니다.

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

 

 

예시

`PATIENT` 테이블이 다음과 같고,

`DOCTOR` 테이블이 다음과 같고,

`APPOINTMENT` 테이블이 다음과 같을 때,

SQL을 실행하면 다음과 같이 출력되어야 합니다.

 

 

 

 

 

 

 


💻 나의 풀이

WITH CS_APP AS(
    SELECT APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID
    FROM APPOINTMENT
    WHERE APNT_YMD LIKE '2022-04-13%'
    AND MCDP_CD = 'CS'
    AND APNT_CNCL_YN = 'N'
)
SELECT c.APNT_NO, p.PT_NAME, p.PT_NO, c.MCDP_CD, d.DR_NAME, c.APNT_YMD
FROM CS_APP c
JOIN PATIENT p ON c.PT_NO = p.PT_NO
JOIN DOCTOR d ON c.MDDR_ID = d.DR_ID
ORDER BY c.APNT_YMD;

 

 

 

결과