728x90
KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | SQL CODEKATA
문제 이름
🏷 관련 주제 : 날짜 형식 변경 TO_CHAR DATE_FORMAT IN ORDER BY
문제 설명
다음은 종합병원에 속한 의사 정보를 담은 DOCTOR 테이블입니다.DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.
| Column name | Type | Nullable |
|---|---|---|
| DR_NAME | VARCHAR(20) | FALSE |
| DR_ID | VARCHAR(10) | FALSE |
| LCNS_NO | VARCHAR(30) | FALSE |
| HIRE_YMD | DATE | FALSE |
| MCDP_CD | VARCHAR(6) | TRUE |
| TLNO | VARCHAR(50) | TRUE |
문제
DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
예시
DOCTOR 테이블이 다음과 같을 때
| DR_NAME | DR_ID | LCNS_NO | HIRE_YMD | MCDP_CD | TLNO |
|---|---|---|---|---|---|
| 루피 | DR20090029 | LC00010001 | 2009-03-01 | CS | 01085482011 |
| 패티 | DR20090001 | LC00010901 | 2009-07-01 | CS | 01085220122 |
| 뽀로로 | DR20170123 | LC00091201 | 2017-03-01 | GS | 01034969210 |
| 티거 | DR20100011 | LC00011201 | 2010-03-01 | NP | 01034229818 |
| 품바 | DR20090231 | LC00011302 | 2015-11-01 | OS | 01049840278 |
| 티몬 | DR20090112 | LC00011162 | 2010-03-01 | FM | 01094622190 |
| 니모 | DR20200012 | LC00911162 | 2020-03-01 | CS | 01089483921 |
| 오로라 | DR20100031 | LC00010327 | 2010-11-01 | OS | 01098428957 |
| 자스민 | DR20100032 | LC00010192 | 2010-03-01 | GS | 01023981922 |
| 벨 | DR20100039 | LC00010562 | 2010-07-01 | GS | 01058390758 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
| DR_NAME | DR_ID | MCDP_CD | HIRE_YMD |
|---|---|---|---|
| 니모 | DR20200012 | CS | 2020-03-01 |
| 뽀로로 | DR20170123 | GS | 2017-03-01 |
| 벨 | DR20100039 | GS | 2010-07-01 |
| 자스민 | DR20100032 | GS | 2010-03-01 |
| 패티 | DR20090001 | CS | 2009-07-01 |
| 루피 | DR20090029 | CS | 2009-03-01 |
주의사항
날짜 포맷은 예시와 동일하게 나와야합니다.
✔ (Oracle) Solution with TO_CHAR & IN & ORDER BY
SELECT DR_NAME
, DR_ID
, MCDP_CD
, TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') "HIRE_YMD"
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC
, DR_NAME ASC;
실행 결과

✔ (MySQL) Solution with DATE_FORAMT & IN & ORDER BY
SELECT DR_NAME
, DR_ID
, MCDP_CD
, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') "HIRE_YMD"
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC
, DR_NAME ASC;
실행 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이 때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
1. DOCTOR 테이블에서 의사의 이름, 의사ID, 진료과, 고용일자를 조회하자
MySQL
SELECT DR_NAME , DR_ID , MCDP_CD , HIRE_YMD FROM DOCTOR;실행 결과

2. 위의 조회 결과에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 인스턴스만 조회하자.
MySQL
SELECT DR_NAME , DR_ID , MCDP_CD , HIRE_YMD FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS');실행 결과

3. 위의 조회 결과를 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬하자.
MySQL
SELECT DR_NAME , DR_ID , MCDP_CD , HIRE_YMD FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS') ORDER BY HIRE_YMD DESC , DR_NAME ASC;실행 결과

4. 날짜 형식을 년-월-일로 출력하자.
별칭으로
HIRE_YMD를 주자.
날짜 형식 변경 방법 : ORACLE -TO_CHAR()/ MYSQL -DATE_FORMAT()
MySQL
SELECT DR_NAME , DR_ID , MCDP_CD , DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') "HIRE_YMD" FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS') ORDER BY HIRE_YMD DESC , DR_NAME ASC;실행 결과

Oracle
SELECT DR_NAME , DR_ID , MCDP_CD , TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') "HIRE_YMD" FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS') ORDER BY HIRE_YMD DESC , DR_NAME ASC;실행 결과

💬 무엇을 새롭게 알았는지
- ORACLE의
TO_CHAR(), MYSQL의DATE_FORMAT()으로 날짜 변경하기 IN사용하기- ORDER BY절에 칼럼 2개로 정렬하기
728x90