
📑 문제설명



- 2022년 5월에 예약한 환자 수를
- 진료과 코드 별로 조회하기
- 컬럼명 별칭 - '진료과코드', '5월예약건수'
- 진료과별 예약한 환자수, 진료과 코드 순서로 오름차순
⭐정답코드

-- 코드를 입력하세요
SELECT mcdp_cd AS "진료과코드", COUNT(pt_no) AS "5월예약건수"
FROM appointment
WHERE DATE_FORMAT(apnt_ymd, '%Y-%m') = '2022-05'
GROUP BY mcdp_cd
ORDER BY 2 ASC, 1 ASC;
1. 별칭
SELECT절에 별칭(alias) 쓸 때 MySQL에서 컬럼 별칭은 작은따옴표(' ')가 아니라 큰따옴표(" ")나 백틱( ` `)을 쓴다.
작은따옴표는 문자열 리터럴을 감쌀 때 쓰니까 컬럼 별칭 감쌀 때는 혼동되지 않게 큰따옴표나 백틱을 사용하는 것이다.
그리고 AS 별칭 형태 쓸때 별칭에 띄어쓰기가 있는 경우는 큰 따옴표가 필수이다.
SELECT column_name AS "별칭"
-- 또는
SELECT column_name AS `별칭`
2. 날짜 필터링
BETWEEN '2022-05-01' AND '2022-05-31 23:59:59' 이렇게도 쓸 수 있고
DATE_FORMAT(column, '%Y-%m') = '2022-05' 와 같은 방식도 많이 사용된다.
단, 중요한 건 날짜 값은 항상 작은따옴표(' ')로 감싸야 한다.
3. ORDER BY 절에서 별칭 사용여부
정렬에서 오답처리 된 사람들이 많았는데 ORDER BY 절에 '5월예약건수', '진료과코드' 이렇게 작은 따옴표로 감싸서 쓰면 오답이다.
GROUP BY, ORDER BY, HAVING 절에 별칭을 쓸 경우 별칭 그대로 써 주거나 `별칭`과 같이 백틱(``)을 붙여서 써야 한다.
'별칭' 이렇게 쓰면 별칭에 적힌 문자 그대로 ORDER BY를 하겠다는 의미이다.
이럴때는 그냥 ORDER BY 2, 1로 컬럼명 순서대로 쓰는 것이 좋다.
4. DISTINCT 사용 여부
COUNT(pt_no)는 pt_no 컬럼이 NULL이 아닌 행의 개수를 세는 함수이다.
- 예약 건수는 COUNT(apnt_no) 또는 COUNT(*)
- (중복 없는)예약 환자 수는 COUNT(DISTINCT pt_no) 써야 한다.
COUNT(DISTINCT(pt_no)) AS "5월예약건수" // ❌
COUNT(pt_no) AS "5월예약건수" // ✔️
| 함수 | 의미 | 특징 |
| COUNT(pt_no) | COUNT(DISTINCT pt_no) | COUNT(*) |
| pt_no가 NULL 아닌 행 개수 | 중복 없이 고유한 pt_no 개수 | 모든 행의 개수 (NULL 상관없음) |
| NULL인 행은 제외하고 세기 | 중복된 값은 한 번만 세고, NULL 제외 | 테이블 내 조건에 맞는 모든 행 세기 |
5. 헷갈리는 부분
그리고 이 문제는 5월에 예약을 취소했든 아니든 그냥 예약한 환자 수를 구하는 문제이다.
그래서 아래 조건은 필요 없다.
AND apnt_cncl_yn = 'N' // ❌'코딩테스트 > SQL테스트' 카테고리의 다른 글
| [프로그래머스] (MySQL) 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (6) | 2025.08.09 |
|---|---|
| [프로그래머스] (MySQL) 고양이와 개는 몇 마리 있을까 (4) | 2025.08.09 |
| [프로그래머스] (MySQL) 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (4) | 2025.05.19 |
| [프로그래머스] (MySQL) 오랜 기간 보호한 동물(1) (2) | 2025.05.19 |
| [프로그래머스] (MySQL) 있었는데요 없었습니다 (0) | 2025.05.18 |