Every Step Matters

[프로그래머스 SQL Lv.2] 진료과별 총 예약 횟수 출력하기 (MySQL) 본문

Database/SQL

[프로그래머스 SQL Lv.2] 진료과별 총 예약 횟수 출력하기 (MySQL)

imnyoung 2026. 1. 5. 14:45

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/132202

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 테이블 : APPOINTMENT

Column name Type Nullable Description
APNT_YMD TIMESTAMP FALSE 진료예약일시
APNT_NO NUMBER(5) FALSE 진료예약번호
PT_NO VARCHAR(10) FALSE 환자번호
MCDP_CD VARCHAR(6) FALSE 진료과코드
MDDR_ID VARCHAR(10) FALSE 의사ID
APNT_CNCL_YN VARCHAR(1) TRUE 예약취소여부
APNT_CNCL_YMD DATE TRUE 예약취소날짜

 

2. 문제

APPOINTMENT 테이블에서 (1) 2022년 5월에 예약한 환자 수(2) 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, (3) 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 (4) 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, (5) 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.

 

3. 문제풀이

(1) 2022년 5월 예약 환자 수를 (2) 진료과코드 별로 조회

먼저 진료과코드 별 환자 수를 구하기 위해 GROUP BY 함수를 이용하여 진료과코드 별로 그룹화하고, 그 뒤 집계함수인 COUNT를 활용한다.

이때 2022년 5월 예약 환자 수만을 조회하고 싶으므로 WHERE절로 조건을 설정해주고, SELECT 절에서 컬럼명의 별칭을 문제에서 지정한 대로 설정해준다.

SELECT MCDP_CD 진료과코드, count(*) 5월예약건수   -- (3) 별칭 설정
FROM appointment
WHERE APNT_YMD >= '2022-05-01'   -- (1) 2022년 5월 예약은 5월 1일부터 31일까지
AND APNT_YMD <= '2022-05-31'
GROUP BY MCDP_CD   -- (2) 진료과코드 별로 그룹화
GROUP BY 원칙 : SELECT 절에 집계 함수와 함께 사용되지 않은 컬럼은 GROUP BY 절에 모두 지정되어야 한다.

(4) 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, (5) 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬

ORDER BY 5월예약건수, 진료과코드   -- select 뒤에 실행되므로 별칭 사용 가능
쿼리문에 대한 시스템 내부적인 실행 순서에 대한 설명은 해당 글 참고

 

4. 정답

따라서 정답은

SELECT MCDP_CD 진료과코드, count(*) 5월예약건수
FROM appointment
WHERE APNT_YMD >= '2022-05-01'
AND APNT_YMD <= '2022-05-31'
GROUP BY MCDP_CD   
ORDER BY 5월예약건수, 진료과코드