프로그래머스 MYSQL 흉부외과 또는 일반외과 의사 목록 출력하기

2022. 12. 20. 05:37SQL/MYSQL

 

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

 

1. 나의 답

SELECT d.DR_NAME, d.DR_ID, d.MCDP_CD, DATE_FORMAT(d.HIRE_YMD, '%Y-%m-%d') as HIRE_YMD FROM DOCTOR as d
WHERE d.MCDP_CD LIKE '%CS%' OR d.MCDP_CD LIKE '%GS%'
ORDER BY HIRE_YMD DESC, d.DR_NAME

 

2. 왜 이렇게 생각했나

SELECT d.DR_NAME, d.DR_ID, d.MCDP_CD, DATE_FORMAT(d.HIRE_YMD, '%Y-%m-%d') as HIRE_YMD FROM DOCTOR as d

문제에서 확인하고 싶은 것은 의사의 이름, 의사ID, 진료과, 고용일자이다. 그렇기 때문에 위의 4가지를 SELECT에 기재해 주었으며 참고사항에 고용일자의 형식을 '2020-03-01'와 같이 하라고 기재되어 있었기 때문에 DATE_FORMAT을 활용하여 HIRE_YMD의 포맷을 설정해주 었다.

WHERE d.MCDP_CD LIKE '%CS%' OR d.MCDP_CD LIKE '%GS%'
ORDER BY HIRE_YMD DESC, d.DR_NAME

진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 데이터이기 때문에 WHRER문을 적게 되었다. 다른사람들의 경우 LIKE를 안 쓰고 = 을 활용하는 경우도 있던데 다음에 사용해보아야겠다. ORDER BY의 경우 위와 같이 2개의 column을 기재하면 왼쪽의 조건부터 정렬하되 값이 동일한경우 오른쪽을 기준으로 정렬해준다.

 

3. 만난 오류

SELECT d.DR_NAME, d.DR_ID, d.MCDP_CD, DATE_FORMAT(d.HIRE_YMD, '%Y-%m-%d') as HIRE_YMD

첫번째는 ' '가 문제가 되었다.

DATE_FORMAT(d.HIRE_YMD, %Y-%m-%d)

DATE_FORMAT을 위와 같이 작성하니 신택스 에러가 발생하였다.

두번째는 as

SELECT d.DR_NAME, d.DR_ID, d.MCDP_CD, DATE_FORMAT(d.HIRE_YMD, '%Y-%m-%d') as d.HIRE_YMD FROM DOCTOR as d
WHERE d.MCDP_CD LIKE '%CS%' OR d.MCDP_CD LIKE '%GS%'
ORDER BY d.HIRE_YMD DESC, d.DR_NAME

이미 존재하는 d.HIRE_YMD를 입력하니 마찬가지로 신택스 에러가 발생하였다. 여기서 'd.'을 제거하여 입력하니 문제없이 조회되었다.