[SQL/코드카타] 프로그래머스 - 취소되지 않은 진료 예약 조회하기

문제

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;

💡 다른 풀이는?

# 개선된 코드 설명

끝.