✨APS (Algorithm Problem Solving)/프로그래머스 SQL

[프로그래머스 SQL] 취소되지 않은 진료 예약 조회하기 / 오라클(Oracle)

Nyan cat 2022. 10. 25. 11:20

 

📜 문제 설명

다음은 환자 정보를 담은 PATIENT 테이블의사 정보를 담은 DOCTOR 테이블, 그리고 진료 예약목록을 담은 APPOINMENT에 대한

테이블입니다. 

PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.

 

Column name Type Nullable
PT_NO VARCHAR(N) FALSE
PT_NAME VARCHAR(N) FALSE
GEND_CD VARCHAR(N) FALSE
AGE INTEGER FALSE
TLNO VARCHAR(N) TRUE
 

 

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

 

Column name Type Nullable
DR_NAME VARCHAR(N) FALSE
DR_ID VARCHAR(N) FALSE
LCNS_NO VARCHAR(N) FALSE
HIRE_YMD DATE FALSE
MCDP_CD VARCHAR(N) TRUE
TLNO VARCHAR(N) TRUE

 

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

 

Column name Type Nullable
APNT_YMD TIMESTAMP FALSE
APNT_NO INTEGER FALSE
PT_NO VARCHAR(N) FALSE
MCDP_CD VARCHAR(N) FALSE
MDDR_ID VARCHAR(N) FALSE
APNT_CNCL_YN VARCHAR(N) TRUE
APNT_CNCL_YMD DATE TRUE

 

❓ 문제

PATIENT, DOCTOR 그리고 APPOINMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요.

진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

 

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/132204

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡 문제 풀이

세 테이블을 조인해서 풀 수 있는 문제이다.

테이블이 세 개고 컬럼 수가 많아서 헷갈릴 수는 있지만 평이하게 풀 수 있다. 

- APPOINTMENT, PATIENT 테이블을 환자 아이디 기준으로 조인

- APPOINTMENT, DOCTOR 테이블을 의사 아이디 기준으로 조인

- 조건절 작성 

 

SELECT 
    a.apnt_no, p.pt_name, p.pt_no, a.mcdp_cd
    , d.dr_name, a.apnt_ymd
FROM appointment a JOIN patient p ON a.pt_no = p.pt_no
JOIN doctor d ON a.mcdp_cd = d.mcdp_cd AND a.mddr_id = d.dr_id
WHERE a.apnt_cncl_yn = 'N'
AND TO_CHAR(a.apnt_ymd, 'YYYY-MM-DD') = '2022-04-13'
ORDER BY a.apnt_ymd
반응형