[프로그래머스/SQL] 진료과별 총 예약 횟수 출력하기 (MYSQL ORDER BY / ORACLE AS "")

HMS·2023년 4월 17일
0

https://school.programmers.co.kr/learn/courses/30/lessons/132202?language=mysql


진료과별 총 예약 횟수 출력하기

문제 설명
다음은 종합병원의 진료 예약정보를 담은 APPOINTMENT 테이블 입니다.
APPOINTMENT 테이블은 다음과 같으며 APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_CNCL_YN, APNT_CNCL_YMD는 각각 진료예약일시, 진료예약번호, 환자번호, 진료과코드, 의사ID, 예약취소여부, 예약취소날짜를 나타냅니다.

문제

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

풀이

ORACLE

TO_CHAR()를 이용해 예약일자를 년도+월로 변경하고 GROUP BY로 묶어주면 문제를 풀 수 있다.
AS 로 이름을 바꿀 때 띄어쓰기가 있거나 혹은 숫자로 시작하는경우 AS 5월예약건수 혹은 '5월예약건수'로 작성하면 에러가 발생한다.
"" 쌍따옴표로 묶어줘야 에러가 발생하지 않는다 (MYSQL의 경우는 묶어주지 않아도 잘 작동함)

MYSQL

SELECT MCDP_CD AS "진료과 코드" ,COUNT(*) AS "5월예약건수"
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY MCDP_CD
ORDER BY "5월예약건수","진료과 코드"

이렇게 작성했는데 정렬이 되지 않았다
찾아보니 ORDER BY를 사용하는 경우에 MYSQL에서는 큰따옴표로 감싸면 하나의 컬럼으로 처리 된다고 한다
그렇게 때문에 ORDER BY "5월예약건수","진료과 코드"와 같이 작성하면 정상적으로 정렬이 되지 않는다.

ORDER BY COUNT(*) ASC, MCDP_CD ASC;
ORDER BY 5월예약건수,진료과코드

ORDER BY 절을 별칭이 아닌 컬럼명으로 지정하거나 컬럼명을 쌍따옴표를 사용하지 않고 지정하면 정상적으로 작동하는걸 확인할 수 있었다.

ORACLE

SELECT MCDP_CD AS "진료과 코드" ,COUNT(TO_CHAR(APNT_YMD,'YYYYMM')) AS "5월예약건수"
FROM APPOINTMENT
WHERE TO_CHAR(APNT_YMD,'YYYYMM') = '202205'
GROUP BY MCDP_CD
ORDER BY "5월예약건수","진료과 코드"

MYSQL

SELECT MCDP_CD AS "진료과 코드", COUNT() AS "5월예약건수"
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY MCDP_CD
ORDER BY COUNT(
) ASC, MCDP_CD ASC;

profile
안녕하세요

0개의 댓글