[프로그래머스 | MySQL] 진료과별 총 예약 횟수 출력하기 (GROUP BY)

    반응형
     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    이 문제는 SQL의 GROUP BY 절을 사용해서 풀어야 하는 문제입니다. 우선, GROUP BY에 대해서 알아보겠습니다.

    1. GROUP BY

    GROUP BY는 MySQL에서 그룹화하여 데이터를 조회할 때 사용합니다. GROUP BY에 특정 컬럼 이름을 지정해주면 그 컬럼의 unique한 값에 따라 데이터를 그룹화하고, 중복된 열은 제거됩니다. GROUP BY 뒤에 그룹핑의 기준이 되는 하나 이상의 컬럼명을 쓰면 됩니다. 일반적으로 GROUP BY는 집계 함수와 같이 쓰입니다. 왜냐하면 데이터를 그룹별로 나누면 그룹별로 집계 데이터를 도출할 수 있기 때문입니다. 

     

    2. 집계 함수(aggregate function)

    • COUNT(*):  전체 row의 개수(전체 행 수)를 반환
    • COUNT([컬럼명]): 컬럼값이 null인 row를 제외한 row의 개수를 반환
    • COUNT(DISTINCT [컬럼명]): 컬럼값이 null이 아닌 row에서 중복을 제거한 개수를 반환
    • SUM([컬럼명]): 컬럼값들의 합계를 반환
    • AVG([컬럼명]): 컬럼값들의 평균을 반환
    • MIN([컬럼명]): 컬럼값들의 최솟값을 반환
    • MAX([컬럼명]): 컬럼값들의 최댓값을 반환

     

    3. 문제 풀이 코드

    SELECT MCDP_CD AS '진료과코드', COUNT(APNT_NO) AS '5월 예약 건수'
    FROM APPOINTMENT
    WHERE APNT_YMD LIKE '2022-05%'
    GROUP BY MCDP_CD
    ORDER BY COUNT(MCDP_CD) ASC, MCDP_CD ASC
    • 문제에서 진료과코드 별로 조회하는 SQL문을 요구하고 있습니다. 따라서 GROUP BY 절의 컬럼은 MCDP_CD가 됩니다.
    • 5월에 예약한 환자의 수를 조회해야 하므로 WHERE 절에 조건을 넣어줍니다.
      '2022-05%'는 2022-05로 시작하는 날짜를 의미합니다.
    • 환자 수를 기준으로 오름차순 정렬하고, 환자 수가 같을 경우, 진료과 코드를 기준으로 오름차순 정렬이므로 ORDER BY COUT(MCDP_CD) ASC, MCDP_CD ASC 절을 작성해줍니다.
    반응형

    댓글