문제
https://school.programmers.co.kr/learn/courses/30/lessons/132203
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
다음은 종합병원에 속한 의사 정보를 담은DOCTOR 테이블입니다. DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.
Column nameTypeNullable| 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_NAMEDR_IDLCNS_NOHIRE_YMDMCDP_CDTLNO| 루피 | 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_NAMEDR_IDMCDP_CDHIRE_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 |
주의사항
날짜 포맷은 예시와 동일하게 나와야합니다.
정답
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,'%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME ASC;
유의할 점 :
- DATETIME -> DATE로 변경
- WHERE 구에 조건 두개 OR로 묶기.
- 일치하는 거 찾을 때, 문자열에는 항상 ' ' 싱글 쿼트로 묶어준다.
- 정렬하는 거 먼저 적용할것을 앞에 놓고, 그다음을 뒤에로. 이때, 순서가있으므로 AND로 묶으려하지말고, ' , (콤마)' 를 사용한다.
DATETIME -> DATE로 변경하기
DATETIME인 열의 이름 `HIRE_YMD`에 함수를 먹입니다.
`DATE_FORMAT(열명, '%Y-%m-%d')`
`2026-02-01`을 표시한다고 가정하자.
| 표기 | 설명 | 예시 |
| %Y | 연도 네자리 다표시 | 2026 |
| %y | 연도 두자리(끝)만 표시 | 26 |
| %M | Month을 영어로 표시 | February |
| %m | Month을 숫자 두글자로 표시 | 02 |
| %D | Day를 1st, 2nd 등으로 표시 | 1st |
| %d | Day를 숫자 두글자로 표시 | 01 |
그래서 문제에서는
`DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD`
로 해주면,
HIRE_YMD를 %Y-%m-%d format으로 나타내고, 그 열의 이름을 HIRE_YMD로 표기하세요의 의미와 같다.
'개인공부정리페이지' 카테고리의 다른 글
| [트러블슈팅].. PEM키가 공개된사건 (0) | 2025.11.29 |
|---|---|
| MergeSort implement in C (0) | 2025.09.24 |
| 코드 포매터 (0) | 2025.08.31 |
| 어노테이션 : Bean과 Autowired의 차이 (0) | 2025.08.23 |
| C++ 공부 (0) | 2025.07.25 |