https://programmers.co.kr/learn/courses/30/lessons/59409
코딩테스트 연습 - 중성화 여부 파악하기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A355753 | Dog | 2015-09-10 13:14:00 | Normal | Elijah | Neutered Male |
A373219 | Cat | 2014-07-29 11:43:00 | Normal | Ella | Spayed Female |
A382192 | Dog | 2015-03-13 13:14:00 | Normal | Maxwell 2 | Intact Male |
- 중성화한 동물: Elijah, Ella
- 중성화하지 않은 동물: Maxwell 2
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID | NAME | 중성화 |
A355753 | Elijah | O |
A373219 | Ella | O |
A382192 | Maxwell 2 | X |
※ 컬럼 이름은 일치하지 않아도 됩니다.
[풀이]
동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회, 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해야 한다.
1. 데이터를 조회할 테이블인 ANIMAL_INS를 FROM절에 작성
2. 조회할 값은 동물의 아이디와 중성화 여부이다.
2-1. SELECT절에 동물의 아이디를 나타내는 컬럼 ANIMAL_ID를 작성한다.
2-2. 중성화 여부를 나타내기 위해서는, SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있는지 확인해야 한다. 해당 단어는 컬럼 값의 가장 앞에 등장하므로 SEX_UPON_INTAKE 컬럽 값의 시작이 'Neutered' 또는 'Spayed'이면 중성화가 되어있는 것이다.
CASE 문을 이용하여 중성화가 되어있다면 'O'를, 중성화가 되어있지 않다면 'X'를 표시할 것이다.
CASE문은 다음과 같은 형식으로 작성한다.
CASE WHEN 조건 THEN 조건 만족 시 컬럼에 표시할 값 ELSE 조건을 만족하지 않을 시 컬럼에 표시할 값 END |
2-2-1. 우선 조건은 SEX_UPON_INTAKE 칼럼 값이 'Neutered' 또는 'Spayed'로 시작하는 지이고, 문자열 전체가 아닌 앞에만 비교할 것이므로 와일드카드 '%'를 사용할 것이다. 와일드카드를 사용할 때는 =가 아닌 LIKE를 사용함을 유의하고, 문자열 비교 시에는 반드시 "" 안에 넣어서 비교해야 한다. 또한 'Neutered' 또는 'Spayed'로 시작하는 지이므로 또한을 의미하는 OR을 이용해야 한다.
그러므로 WHEN에 들어갈 조건은 WHEN SEX_UPON_INTAKE LIKE "Neutered%" OR SEX_UPON_INTAKE LIKE "Spayed%" 이다.
2-2-2. WHEN 조건을 만족하면 컬럼에 'O'로 표시할 것이므로 THEN 'O'로 작성한다.
2-2-3. WHEN 조건을 만족하지 않으면 'X'로 표시할 것이므로 ELSE 'X'로 작성한다.
2-3. 중성화 여부를 나타내는 컬럼 이름을 "중성화"라고 하고 싶으면 CASE문을 END로 종료한 다음에 AS 중성화를 작성하면 CASE문에 해당하는 컬럼 이름이 중성화로 표시된다.
3. 조회할 값을 아이디 순으로 조회할 것이므로 ORDER BY 절에 ANIMAL_ID를 작성하여 아이디 순으로 정렬한다.
[코드]
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE "Neutered%" OR SEX_UPON_INTAKE LIKE "Spayed%"
THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
'SQL > 프로그래머스' 카테고리의 다른 글
[프로그래머스/SQL] 헤비 유저가 소유한 장소(MySQL) (0) | 2021.11.07 |
---|---|
[프로그래머스/SQL] 우유와 요거트가 담긴 장바구니(MySQL) (0) | 2021.11.07 |
[프로그래머스/SQL] 오랜 기간 보호한 동물(2)(MySQL) (0) | 2021.11.06 |
[프로그래머스/SQL] 이름에 el이 들어가는 동물 찾기(MySQL) (0) | 2021.11.06 |
[프로그래머스/SQL] 루시와 엘라 찾기(MySQL) (0) | 2021.11.06 |