[코딩테스트/MySQL] 03. 흉부외과 또는 일반외과 의사 목록 출력하기

서회정's avatar
Mar 19, 2025
[코딩테스트/MySQL] 03. 흉부외과 또는 일반외과 의사 목록 출력하기

문제 설명

📌
다음은 식당의 정보를 담은 REST_INFO 테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_IDREST_NAMEFOOD_TYPEVIEWSFAVORITESPARKING_LOTADDRESSTEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.
다음은 종합병원에 속한 의사 정보를 담은DOCTOR 테이블입니다. DOCTOR 테이블은 다음과 같으며 DR_NAMEDR_IDLCNS_NOHIRE_YMDMCDP_CDTLNO는 각각 의사이름, 의사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문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
 

정답 코드

-- 코드를 입력하세요 -- SELECT * from doctor; -- 1. 해당 테이블에서 흉부외과(CS), 일반외과(GS) -- 2. 의사이름, 의사ID, 진료과, 고용일자 조회 -- 3. 고용일자 기준으로 내림차순 -- 고용일자 같을 때, 이름 기준 오름차순 select dr_name 의사이름, dr_id ID, mcdp_cd 진료과, date_format(hire_ymd, '%Y-%m-%d') 고용일자 from doctor where mcdp_cd = 'CS' or mcdp_cd = 'GS' order by hire_ymd desc, dr_name asc;
 

✅핵심코드 살펴보기

date_format()


날짜포맷을 작성해야 하는 이유.
정렬이나 연산에 영향을 미치기 때문이다. 문자열로 변환될 때 오류를 발생할 수 있음!
이것때문에 계속 틀렸으니 트러블슈팅에 기재하자^^..
 

where ~ or ~


~거나 ~거나 와 같은 두 가지 이상의 조건을 찾을 때 사용할 수 있다.
문제를 풀 때 in( ~ , ~ ) 문법(축약형)을 사용했으나 풀리지 않음.
이 문제는 특정 DBMS의 최적화 방식의 차이 혹은 데이터 타입의 문제, null값 처리 방식의 차이 때문일 수 있는데, 같은 타입의 값을 사용했기 때문에 DBMS의 최적화 방식의 차이 혹은 null값 처리 방식의 차이로 인해 발생한 문제인 것 같아보인다. 보다 정확한 연산을 위해 or을 사용하는 편이 좋겠다.
 

desc / asc


내림차순, 오름차순 정렬.
defalt는 오름차순이기 때문에 오름차순 단독으로 필요할 시 생략 가능하다.
Share article

clubnerdy