문제
https://school.programmers.co.kr/learn/courses/30/lessons/132204프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🎯 문제 요약
- PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서
- 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회
- 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 출력
- 진료예약일시 오름차순 정렬
✍️ 내가 작성한 코드
WITH no_cncl AS (
SELECT apnt_no, pt_no, mcdp_cd, mddr_id, apnt_ymd
FROM appointment
WHERE apnt_cncl_yn = 'N'
AND mcdp_cd = 'CS'
AND apnt_ymd LIKE '2022-04-13%'
)
SELECT n.apnt_no,
p.pt_name,
p.pt_no,
n.mcdp_cd,
d.dr_name,
n.apnt_ymd
FROM no_cncl n
JOIN patient p ON p.pt_no=n.pt_no
JOIN doctor d ON d.dr_id=n.mddr_id
ORDER BY n.apnt_ymd ASC;
시간 지나 다시 풀어보니, 전에는 모르겠던 문제가 풀리는군!!
그만큼 성장했다는거겠지!!?
🔍 코드 설명
1. '2022-04-13'에 취소되지 않은 CS(흉부외과) 진료 예약건 뽑아내기 ➡️ WITH 문에 담아보자
WITH no_cncl AS (
SELECT apnt_no, pt_no, mcdp_cd, mddr_id, apnt_ymd
FROM appointment
WHERE apnt_cncl_yn = 'N'
AND mcdp_cd = 'CS'
AND apnt_ymd LIKE '2022-04-13%'
) --🔗 AND로 여러 조건 연결하기
2. JOIN으로 3개 테이블 연결!
WITH no_cncl AS (
...
)
SELECT ...
FROM no_cncl n
JOIN patient p ON p.pt_no=n.pt_no
JOIN doctor d ON d.dr_id=n.mddr_id --🔍 dr_id와 mddr_id 는 같은 컬럼!
3. 뽑아낼 컬럼과 정렬 해주기 - 마무리!
-- WITH no_cncl AS (
-- SELECT apnt_no, pt_no, mcdp_cd, mddr_id, apnt_ymd
-- FROM appointment
-- WHERE apnt_cncl_yn = 'N'
-- AND mcdp_cd = 'CS'
-- AND apnt_ymd LIKE '2022-04-13%'
-- )
SELECT n.apnt_no,
p.pt_name,
p.pt_no,
n.mcdp_cd,
d.dr_name,
n.apnt_ymd
-- FROM no_cncl n
-- JOIN patient p ON p.pt_no=n.pt_no
-- JOIN doctor d ON d.dr_id=n.mddr_id
ORDER BY n.apnt_ymd ASC;
💡 다른 풀이는?
# 개선된 코드 설명
끝.
'SQL' 카테고리의 다른 글
| [SQL/코드카타] 프로그래머스 - 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 (0) | 2025.09.24 |
|---|---|
| [SQL/코드카타] 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기 | UNION & NULLIF (0) | 2025.09.22 |
| [SQL/코드카타] 프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 (4) | 2025.09.19 |