APPOINTMENT 테이블에서
2022년 5월에 예약한
환자 수를
진료과코드 별로 조회하는 SQL문을 작성해주세요.
이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고
결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고,
예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.
SELECT MCDP_CD AS '진료과 코드', COUNT(*) AS '5월예약건수'
FROM APPOINTMENT
WHERE YEAR(APNT_YMD)=2022 AND MONTH(APNT_YMD)=5
GROUP BY MCDP_CD
ORDER BY COUNT(*), MCDP_CD;
GROUP BY로 진료과 코드에 따라서 Grouping을 수행하는 문제였다.
GROUP BY 절이 있으면, SELECT절에는 GROUP BY 절에서 사용했던 attribute나 집단 함수가 적용된 값만 사용할 수 있다.
GROUP BY는 각각의 그룹을 출력해주는 절인데, 만약 의사ID를 같이 출력하려고 한다면 해당 그룹의 어떤 의사 ID를 출력해줘야 할지 DBMS가 알 수 없기 때문이다.
대신 각 그룹의 '총 의사 인원수'나 '월급 총합' 같은 것은 출력해줄 수 있기 때문에 집단 함수가 적용된 값은 출력할 수 있다.
MYSQL은 GROUP BY 절에서 등장하지 않은 attribute를 SELECT절에서 사용해도 별다른 에러를 발생시키지 않는다. 하지만 출력된 값은 아무 값이나 나오기 때문에 해서는 안되는 방식이다.