[TIL] 24.09.14 SAT

GDORI·2024년 9월 14일
0

TIL

목록 보기
41/79
post-thumbnail

챌린지반 숙제를 오늘의 TIL로 작성하고자 한다.

1번 숙제

https://school.programmers.co.kr/learn/courses/30/lessons/132203
흉부외과 또는 일반외과 의사 목록 출력하기

문제 설명

다음은 종합병원에 속한 의사 정보를 담은DOCTOR 테이블입니다. DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.

문제

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

예시

풀이

문제에서 의사의 이름, 의사ID, 진료과, 고용일자를 조회하라는 내용이 있다.

SELECT DR_NAME, DR_ID, MCDP_CD, HIRE_YMD

이렇게 작성할 수 있는데, 여기서 수정되어야 할 것이 주의사항에 날짜 포맷이 예시와 동일하게 나와야한다. 라는 말이 있다.
그냥 출력했을때에는 2020-03-01 00:00:00 이런 형식으로 출력이 되기 때문에 %Y-%M-%D 형식으로 변경해주어야 한다.
이때 사용하는 것이 DATE_FORMAT(적용컬럼, 형식)이며, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
써줄 수 있겠다.

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

다음 FROM은 그냥 DOCTOR 테이블에서 가져오면 되므로 FROM DOCTOR

조건의 경우 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사 이기 때문에 OR을 이용하여 묶어준다.
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'

이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬
ORDER BY의 경우 오름차순은 ASC, 내림차순은 DESC 이다.
고용일자 기준으로 DESC 하는 동시에, 고용일자가 같을 때 이름 기준으로 ASC 하라는 것은 다음과 같이 쓸 수 있다.

ORDER BY HIRE_YMD DESC, DR_NAME ASC;

최종 코드

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;

실행결과

2번 숙제

https://school.programmers.co.kr/learn/courses/30/lessons/133025
과일로 만든 아이스크림 고르기

문제 설명

문제

상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.

예시

풀이

INNER JOIN 을 통하여 FIRST_HALF 테이블과 ICECREAM_INFO 테이블을 묶어주고 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 테이블을 뽑아주고 아이스크림의 맛을 총주문량이 큰 순서대로 내림차순으로 처리해주면 되는 문제로 WHERE절에서 AND로 조건을 묶어주고, ORDER BY절에서 총 주문량 DESC로 처리해주면 될 것 같다.

최종 코드

SELECT F.FLAVOR 
FROM FIRST_HALF F
INNER JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글