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

yannie·2024년 9월 11일
0

[문제]

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

[틀린 풀이]

SELECT
    MCDP_CD AS "진료과 코드",
    COUNT(LEFT(APNT_YMD, 7) = '2022-05') AS "5월예약건수"
FROM APPOINTMENT
GROUP BY MCDP_CD
ORDER BY 2, 1
;
  • COUNT()함수는 조건식의 참/거짓의 여부를 세는 것이 아니라,
    특정 열의 값의 개수를 세는 함수이다.
  • 위 코드에서 COUNT(LEFT(APNT_YMD, 7) = '2022-05')는 '왼쪽 7자리가 2022-05인 경우 참인지 거짓인지를 BOOLEAN결과를 반환.
  • BUT, COUNT는 BOOLEAN결과의 개수를 세지 않으므로, 원하는 결과를 얻지 못함.

[맞은 풀이]

SELECT
    MCDP_CD AS "진료과 코드",
    COUNT(PT_NO) AS "5월예약건수"
FROM APPOINTMENT
WHERE LEFT(APNT_YMD, 7) = '2022-05'
GROUP BY MCDP_CD
ORDER BY 2, 1
;
  • WHERE절로 조건을 미리 필터링한 후, 그 결과에 대해 COUNT(PT_NO)를 수행

그럼 WHERE이 아니라 HAVING으로 필터링할 수 있지 않나?

  • WHERE절 : 데이터가 그룹화되기 전에 조건을 필터링
  • HAVING절 : 데이터를 그룹화한 후 그룹에 대한 조건 필터링
    이 경우, WHERE절이 더 적합
    -> 날짜 자체는 그룹화되기 전에 필터링해야 하는 조건이기 때문이다.

0개의 댓글