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

2026. 3. 31. 12:49·코딩테스트/SQL

카테고리: SQL · GROUP BY · DATE_FORMAT · ORDER BY

플랫폼: 프로그래머스

난이도: Level 2


문제 설명

다음은 종합병원의 진료 예약정보를 담은 APPOINTMENT 테이블입니다.

| Column name | Type | Nullable |
| --- | --- | --- |
| APNT\_YMD | TIMESTAMP | FALSE |
| APNT\_NO | NUMBER(5) | FALSE |
| PT\_NO | VARCHAR(10) | FALSE |
| MCDP\_CD | VARCHAR(6) | FALSE |
| MDDR\_ID | VARCHAR(10) | FALSE |
| APNT\_CNCL\_YN | VARCHAR(1) | TRUE |
| APNT\_CNCL\_YMD | DATE | TRUE |

APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요.

컬럼명은 '진료과 코드', '5월예약건수'로 지정하고, 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하되, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.


예시

입력

| APNT\_YMD | APNT\_NO | PT\_NO | MCDP\_CD | MDDR\_ID | APNT\_CNCL\_YN | APNT\_CNCL\_YMD |
| --- | --- | --- | --- | --- | --- | --- |
| 2022-04-14 09:30:00 | 47 | PT22000064 | GS | DR20170123 | N | NULL |
| 2022-04-15 10:30:00 | 48 | PT22000065 | OB | DR20100231 | N | NULL |
| 2022-05-15 17:30:00 | 49 | PT22000086 | OB | DR20100231 | N | NULL |
| 2022-05-18 10:30:00 | 52 | PT22000019 | GS | DR20100039 | N | NULL |
| 2022-05-19 12:00:00 | 53 | PT22000020 | FM | DR20010112 | N | NULL |
| 2022-05-22 08:30:00 | 54 | PT22000021 | GS | DR20100039 | N | NULL |
| 2022-05-04 10:30:00 | 56 | PT22000023 | FM | DR20090112 | N | NULL |
| 2022-05-14 15:30:00 | 57 | PT22000074 | CS | DR20200012 | N | NULL |
| 2022-05-24 15:30:00 | 58 | PT22000085 | CS | DR20200012 | N | NULL |
| 2022-05-28 10:00:00 | 60 | PT22000092 | OS | DR20100031 | N | NULL |

출력

| 진료과코드 | 5월예약건수 |
| --- | --- |
| OB | 1 |
| OS | 1 |
| CS | 2 |
| FM | 2 |
| GS | 2 |

내 풀이

SELECT
    MCDP_CD AS '진료과 코드',
    COUNT(*) AS '5월예약건수'
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY MCDP_CD
ORDER BY COUNT(*) ASC, MCDP_CD ASC;

공부 포인트

1. DATE_FORMAT() 으로 날짜 필터링

  • APNT_YMD 는 TIMESTAMP 타입이므로 연월 단위로 비교하려면 DATE_FORMAT() 으로 포맷을 맞춰줘야 함
  • DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05' 로 2022년 5월 데이터만 필터링
  • YEAR(APNT_YMD) = 2022 AND MONTH(APNT_YMD) = 5 로 작성해도 동일한 결과를 얻을 수 있음

2. 다중 정렬 (ORDER BY)

  • ORDER BY COUNT(*) ASC, MCDP_CD ASC 처럼 콤마로 구분하여 정렬 기준을 여러 개 지정할 수 있음
  • 앞에 있는 기준이 같을 경우 다음 기준으로 정렬함

추가 팁

  • COUNT() 는 COUNT(*) 로 쓰는 것이 일반적입니다. COUNT(컬럼명) 은 해당 컬럼의 NULL을 제외하고 세지만, COUNT(*) 는 행 전체를 세기 때문에 예약 건수를 셀 때는 COUNT(*) 가 더 명확합니다.
  • DATE_FORMAT 대신 BETWEEN 을 활용하는 방법도 있습니다.
  • WHERE APNT_YMD BETWEEN '2022-05-01' AND '2022-05-31 23:59:59'

마무리 요약

이번 문제는 DATE_FORMAT() 으로 날짜를 필터링하고 GROUP BY 와 다중 ORDER BY 를 조합하는 실무형 SQL 예제다.

날짜 타입 필터링 방법과 다중 정렬 기준 설정은 데이터 분석 시 자주 쓰이는 핵심 패턴이므로 꼭 익혀두는 것이 좋다.


이상입니다. 혹시나 제가 잘못된 내용을 작성했거나 더 좋은 방법이 있다면 댓글 남겨주세요.

지금까지 이 글을 봐주셔서 감사합니다.

'코딩테스트 > SQL' 카테고리의 다른 글

[프로그래머스_SQL] Lv.2 가격이 제일 비싼 식품의 정보 출력하기  (0) 2026.03.21
[프로그래머스_SQL] Lv.1 조건에 맞는 아이템들의 가격의 총합 구하기  (0) 2026.03.17
[프로그래머스_SQL] Lv.1 잡은 물고기 중 가장 큰 물고기의 길이 구하기  (0) 2026.03.16
[프로그래머스_SQL] Lv.2 동명 동물 수 찾기  (0) 2026.03.15
'코딩테스트/SQL' 카테고리의 다른 글
  • [프로그래머스_SQL] Lv.2 가격이 제일 비싼 식품의 정보 출력하기
  • [프로그래머스_SQL] Lv.1 조건에 맞는 아이템들의 가격의 총합 구하기
  • [프로그래머스_SQL] Lv.1 잡은 물고기 중 가장 큰 물고기의 길이 구하기
  • [프로그래머스_SQL] Lv.2 동명 동물 수 찾기
byhy0
byhy0
byhy0 님의 블로그 입니다.
  • byhy0
    byhy0 님의 블로그
    byhy0
  • 전체
    오늘
    어제
    • 분류 전체보기 (62)
      • T아카데미 (4)
      • Project (2)
      • Airflow (4)
      • Python (16)
        • Django (0)
      • Java (1)
      • Spring (4)
        • Board Project (3)
      • SQL (3)
      • Docker (1)
      • 클라우드 (2)
      • Error (3)
      • Git (5)
      • 코딩테스트 (12)
        • SQL (5)
        • Python (7)
      • TIL (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python #pytest #테스트
    T아카데미 #면접 #데이터 엔지니어 #K-Digital Traning
    venv #파이썬 가상환경 #가상환경
    API 요청 #API
    programmers # 코딩테스트 #sql
    vscode #git #git연동법
    T아카데미#SK플래닛#데이터엔지니어2기
    T아카데미 #SK플래닛 #회고 #1주차
    #클라우드 #클라우드컴퓨팅 #CloudComputing #온프레미스 #CS기초 #IT인프라 #서버
    BigQuery #SQL
    programmers #SQL #코딩테스트
    Git #설치법
    게시판
    #Python #정규표현식 #Regex #웹크롤링 #데이터처리
    오블완
    Spring
    T아카데미 #2주차 회고 #데이터 엔지니어 2기
    git #github #repository 생성
    티스토리챌린지
    push #pull #git연동
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
byhy0
[프로그래머스_SQL] Lv.2 진료과별 총 예약 횟수 출력하기
상단으로

티스토리툴바