Skip to main content

[SQL] 132202 진료과별 총 예약횟수 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/132202

image.png

image.png

image.png

📌문제

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

💡 정답 쿼리

image.png

-- 코드를 입력하세요
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;

또는

-- 코드를 입력하세요
SELECT mcdp_cd AS '진료과코드', COUNT(pt_no) AS '5월예약건수'
FROM appointment
WHERE YEAR(apnt_ymd) = '2022' AND MONTH(apnt_ymd) = '05'
GROUP BY mcdp_cd
ORDER BY 5월예약건수, 진료과코드

오답

쉬운 문제인데 굉장히 헷갈리는 요소가 많은 문제이다.

image.png

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)

pt_no가 NULL 아닌 행 개수

NULL인 행은 제외하고 세기

COUNT(DISTINCT pt_no)

중복 없이 고유한 pt_no 개수

중복된 값은 한 번만 세고, NULL 제외

COUNT(*)

모든 행의 개수 (NULL 상관없음)

테이블 내 조건에 맞는 모든 행 세기


5. 헷갈렸던 부분

이 문제는 5월에 예약을 취소했든 아니든 그냥 예약한 환자 수를 구하는 문제이다.
그래서 아래 조건은 필요 없다.

AND apnt_cncl_yn = 'N' // ❌