728x90

< 링크 >
여기를 클릭하세요 (프로그래머스 고득점 Kit 106문제 모음)

여기를 클릭하세요 (3. 흉부외과 또는 일반외과 의사 목록 출력하기)

< 문제 >
DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.

< 내가 작성한 코드 >
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;

< 나의 풀이 >
1. select * from doctor; 를 통해 데이터가 어떻게 생겼는지 살펴보았다.

2. 문제에서 필요로 하는 컬럼은
dr_name, dr_id, mcdp_cd, hire_ymd 4개 컬럼이므로

select dr_name, dr_id, mcdp_cd, hire_ymd
from doctor; 로 쿼리를 수정했다.

3. 문제에 따라 where 조건(흉부외과 이거나 일반외과 : or 사용)을 추가했고,
order by 정렬 방식도 추가했다. 오름차순이 asc 이고 내림차순이 desc 이다.

현재까지 작성한 쿼리는
SELECT dr_name, dr_id, mcdp_cd, hire_ymd
from doctor
where mcdp_cd = 'CS' or mcdp_cd = 'GS'
order by hire_ymd desc, dr_name asc;

4. 그런데 이 상태로 제출하면 틀렸다고 메시지가 뜨는데
그 이유는 hire_ymd 컬럼에서 주어진 데이터 형식과 정답이 원하는 형식이 다르기 때문이다.
따라서 date_format() 함수를 사용해야 한다.

결국 아래 쿼리가 정답이 된다.
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;

+ Recent posts