SQL_Programmers 코딩 테스트 5

DA_LEESUNHO·2025년 11월 13일

Practice & Project

목록 보기
5/5

학습사이트 > https://school.programmers.co.kr/

경기도에 위치한 식품창고 목록 출력하기

FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.

SELECT
    WAREHOUSE_ID,
    WAREHOUSE_NAME,
    ADDRESS,
    CASE WHEN FREEZER_YN IS NULL THEN 'N'
    ELSE FREEZER_YN END AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '%경기도%'
ORDER BY WAREHOUSE_ID ASC

Case When 구문을 통해 Null 대체 값을 지정해주어야하는 문제였다.
또한 Null처리함수 IFNULL 을 사용할 수도 있다.

SELECT IFNULL(FREEZER_YN, "N")		# 해당 컬럼이 NULL 일 경우 문자열 N으로 표기

하지만 INFULL 함수는 MYSQL에서만 사용이 가능하다
모든 DBMS에서 사용할 수 있는 COALESCE 함수를 기억해두자

SELECT COALESCE(FREEZER_YN, 'N')		# 해당 컬럼이 NULL 일 경우 문자열 N으로 표기

DATETIME 에서 DATE로 형 변환

ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
날짜 컬럼은 시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요

SELECT
    ANIMAL_ID,
    NAME,
    DATE_FORMAT(DATETIME, '%Y-%m-%d') AS '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
'''
SELECT
    ANIMAL_ID,
    NAME,
    SUBSTR(DATETIME, 1, 10) AS  '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
'''

두 가지 방법으로 풀어보았다.
1) DATE_FROMAT 함수를 이용하여 날짜 형식 변환
2) SUBSTR 함수를 이용하여 앞에서부터 지정한 문자열 추출

흉부외과 또는 일반외과 의사 목록 출력하기

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

SELECT
    DR_NAME,
    DR_ID,
    MCDP_CD,
    DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD	# 문제에서 제시한 조건(날짜형식)을 위해 DATE_FORMAT 함수 사용
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC

문제를 끝까지 읽는 습관을 들여야겠다..
날짜형식 맞춤 조건을 보지 못해서 바로잡는데 오래걸렸다

가격이 제일 비싼 식품의 정보 출력하기

FFOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.

SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1

'''
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE =
        (SELECT
            MAX(PRICE)
        FROM FOOD_PRODUCT
        )
'''

처음엔 '너무 쉽다' 하면서 첫 번째 쿼리(가격 내림차 순 & LIMIT 활용) 으로 풀었다.
이후 1분 정도 다른 방법을 고민하다가 중첩 서브쿼리를 사용해 풀어보았다.

profile
성장과 회고를 기록하는 일기장

0개의 댓글