2024. 9. 6. 18:00ㆍSQL 고득점 Kit/SELECT
https://school.programmers.co.kr/learn/courses/30/lessons/132203
문제 설명
다음은 종합병원에 속한 의사 정보를 담은 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 |
주의사항
날짜 포맷은 예시와 동일하게 나와야합니다.
의사들의 정보가 담긴 DOCTOR 테이블에서 흉부외과(CS) 또는 일반외과(GS)에 속한 의사들의 정보를 가져오는 문제입니다.
문제에서 어려운 점은 딱히 없지만 주의할 점은 네 가지 정도 있습니다.
1. 흉부외과(CS) 또는 일반외과(GS)에 속해야 합니다.
2. 고용일자를 기준으로 내림차순 정렬해야 합니다.
3. 고용일자가 같다면, 이름을 기준으로 오름차순 정렬해야 합니다.
4. 날짜 포맷은 YYYY-MM-DD 형식이어야 합니다.
이 네 가지 점을 주의하면서 정답 코드를 작성해보겠습니다.
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;
흉부외과 또는 일반외과에 속하므로, 해당 조건식은 OR을 기반으로 작성해야 합니다.
정렬기준은 ORDER BY 조건1, 조건2, ... 식으로 작성할 수 있는데요, 여기서는 일차적으로 고용일자, 이차적으로 이름으로 정렬합니다.
마지막으로 날짜 포맷의 경우, 테이블의 값은 YYYY-MM-DD HH:MM:SS 형식이었기 때문에 이 형식을 YYYY-MM-DD 형식으로 변환해줘야 합니다. 따라서 DATE_FORMAT(열 이름, '형식')을 사용해서 YYYY-MM-DD 형식으로 바꿔주었습니다.
형식에 대해 궁금하신 분들은 MySQL에서 이를 확인할 수 있습니다.
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
날짜 형식을 변경하는 문제는 자주 출제되는 문제인 만큼, 외워두시는 것을 추천드립니다.
'SQL 고득점 Kit > SELECT' 카테고리의 다른 글
[SELECT] 조건에 부합하는 중고거래 댓글 조회하기 (2) | 2024.09.10 |
---|---|
[SELECT] 서울에 위치한 식당 목록 출력하기 (1) | 2024.09.09 |
[SELECT] 3월에 태어난 여성 회원 목록 출력하기 (1) | 2024.09.08 |
[SELECT] 과일로 만든 아이스크림 고르기 (5) | 2024.09.07 |
[SELECT] 평균 일일 대여 요금 구하기 (1) | 2024.09.05 |