728x90
KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | SQL CODEKATA
🩺 진료과별 총 예약 횟수 출력하기
🏷 관련 주제 : 날짜 형식 변경 TO_CHAR() DATE_FORMAT() COUNT() GROUP BY ORDER BY

✔ (Oracle) Solution with TO_CHAR(), GROUP BY, ORDER BY 칼럼 번호
SELECT MCDP_CD "진료과 코드"
, COUNT(*) "5월예약건수"
FROM APPOINTMENT
WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05'
GROUP BY MCDP_CD
ORDER BY 2, 1;
실행 결과

✔ (MySQL) Solution with DATE_FORMAT(), GROUP BY, ORDER BY 칼럼 번호
SELECT MCDP_CD "진료과 코드"
, COUNT(*) "5월예약건수"
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY MCDP_CD
ORDER BY "5월예약건수", "진료과 코드";
실행 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요.
이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.
1. APPOINTMENT 테이블에서 진료예약일시, 진료과코드 조회하기
- Oracle & MySQL
SELECT APNT_YMD , MCDP_CD FROM APPOINTMENT;실행 결과

2. 진료예약일시가 2022년 5월인 인스턴스 조회하기
- MySQL
- DATE_FORMAT() 이용하기
SELECT APNT_YMD , MCDP_CD FROM APPOINTMENT WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05';실행 결과

- LIKE 이용해 날짜 비교하기
SELECT APNT_YMD , MCDP_CD FROM APPOINTMENT WHERE APNT_YMD LIKE '2022-05%';
- DATE_FORMAT() 이용하기
- Oracle
(날짜형식 변경에 TO_CHAR()를 사용하자)SELECT APNT_YMD , MCDP_CD FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05';실행 결과

3. 진료예약일시가 2022년 5월인 인스턴스의 진료과 코드와 진료과 코드별 인스턴스 수 조회하기
MCDP_CD칼럼에 "진료과 코드",COUNT(*)칼럼에 "5월예약건수" 라고 별칭을 주자
- MySQL
SELECT MCDP_CD "진료과 코드" , COUNT(*) "5월예약건수" FROM APPOINTMENT WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05' GROUP BY MCDP_CD;실행 결과

- Oracle
SELECT MCDP_CD "진료과 코드" , COUNT(*) "5월예약건수" FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05' GROUP BY MCDP_CD;실행 결과

4. 위의 조회 결과를 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬하자.
- Oracle
(MySQL은 WHERE절의TO_CHAR()만DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'으로 변경하면 된다.)- 칼럼 번호로 정렬하기
SELECT MCDP_CD "진료과 코드" , COUNT(*) "5월예약건수" FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05' GROUP BY MCDP_CD ORDER BY 2, 1;실행 결과

- 별칭으로 정렬하기
SELECT MCDP_CD "진료과 코드" , COUNT(*) "5월예약건수" FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05' GROUP BY MCDP_CD ORDER BY "5월예약건수", "진료과 코드"; - 칼럼으로 정렬하기
SELECT MCDP_CD "진료과 코드" , COUNT(*) "5월예약건수" FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05' GROUP BY MCDP_CD ORDER BY COUNT(*), MCDP_CD;
- 칼럼 번호로 정렬하기
💬 무엇을 새롭게 알았는지
Oracle에서도 칼럼 번호 및 별칭으로 정렬이 가능하다는 것을 알게되었다.
728x90