반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131114
문제 설명
다음은 식품창고의 정보를 담은 FOOD_WAREHOUSE 테이블입니다. FOOD_WAREHOUSE 테이블은 다음과 같으며 WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, TLNO, FREEZER_YN는 창고 ID, 창고 이름, 창고 주소, 전화번호, 냉동시설 여부를 의미합니다.
Column name | Type | Nullable |
WAREHOUSE_ID | VARCHAR(10) | FALSE |
WAREHOUSE_NAME | VARCHAR(20) | FALSE |
ADDRESS | VARCHAR(100) | TRUE |
TLNO | VARCHAR(20) | TRUE |
FREEZER_YN | VARCHAR(1) | TRUE |
문제
FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해 주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해 주세요.
예시
FOOD_WAREHOUSE 테이블이 다음과 같을 때
FACTORY_ID | FACTORY_NAME | ADDRESS | TLNO | FREEZER_YN |
WH0001 | 창고_경기1 | 경기도 안산시 상록구 용담로 141 | 031-152-1332 | Y |
WH0002 | 창고_충북1 | 충청북도 진천군 진천읍 씨제이로 110 | 043-623-9900 | N |
WH0003 | 창고_경기2 | 경기도 이천시 마장면 덕평로 811 | 031-221-7241 | NULL |
WH0004 | 창고_경기3 | 경기도 김포시 대곶면 율생중앙로205번길 | 031-671-1900 | N |
WH0005 | 창고_충남1 | 충청남도 천안시 동남구 광덕면 신덕리1길 9 | 041-876-5421 | Y |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
FACTORY_ID | FACTORY_NAME | ADDRESS | TLNO | FREEZER_YN |
WH0001 | 창고_경기1 | 경기도 안산시 상록구 용담로 141 | 031-152-1332 | Y |
WH0003 | 창고_경기2 | 경기도 이천시 마장면 덕평로 811 | 031-221-7241 | NULL |
WH0004 | 창고_경기3 | 경기도 김포시 대곶면 율생중앙로205번길 | 031-671-1900 | N |
코드
해당 문제는 공통적으로 FOOD_WAREHOSE 테이블에서 WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, FREEZER_YN 속성들을 선택하여 ADDRESS가 경기도로 시작하는 데이터를 조회하는 쿼리이다.
FREEZER_YN이 NULL일 경우 처리하는 방법을 다양하게 적용할 수 있다.
1. COALESCE 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;
- COALESCE(A, B) : A(데이터)가 NULL일 경우 B로 대체
2. IFNULL 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;
- IFNULL(A, B) : A(컬럼)의 값이 NULL일 경우 B로 대체
3. CASE 사용
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 조건 절이 참이면 THEN으로 대체(여러 개 사용 가능)
- WHEN 조건에 만족하는 것이 없는 경우 ELSE
- END로 끝을 나타냄
4. IF 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS,
IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;
- IF(A, B, C) : A가 참이면 B로 대체, 거짓이면 C 반환
- FREEZER_YN이 NULL이면 'N'으로 대체, 거짓이면 FREEZER_YN 값 반환
반응형
'코딩 테스트(Coding Test) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 조건에 맞는 회원수 구하기 - MySQL (0) | 2023.04.18 |
---|---|
[프로그래머스] 이름이 없는 동물의 아이디 - MySQL (0) | 2023.04.17 |
[프로그래머스] 가장 비싼 상품 구하기 - MySQL (0) | 2023.04.14 |
[프로그래머스] 나이 정보가 없는 회원 수 구하기 - MySQL (0) | 2023.04.13 |
[프로그래머스] 강원도에 위치한 생산공장 목록 출력하기 - MySQL (0) | 2023.04.12 |