중성화 여부 파악하기
String, Date
중성화 여부 파악하기
문제 설명
다음은 동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블입니다.
ANIMAL_INS 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
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’라고 표시해주세요.
풀이 과정
- 조건 확인
SEX_UPON_INTAKE
컬럼에 ‘Neutered’ 또는 ‘Spayed’가 포함된 경우 중성화된 것으로 판단
- CASE 문 사용
- CASE 문 사용해서 중성화 여부를 ‘O’ 또는 ‘X’로 구분
- LIKE 연산자를 사용해 ‘Neutered’ 또는 ‘Spayed’라는 단어가 포함된 경우 ‘O’ 반환, 그렇지 않으면 ‘X’ 반환
- 결과 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 결과는 ANIMAL_ID 기준으로 오름차순 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 최종 결과 출력
- SELECT 절에서
ANIMAL_ID
,NAME
,중성화 여부
출력
- SELECT 절에서
- 교훈
- CASE문과 like은 오라클, MySQL 둘 다 완벽하게 호환 된다….
정답
1
2
3
4
5
6
7
8
9
10
11
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;
Tip
- CASE 문을 사용한 조건부 처리
- LIKE 연산자 사용하여 문자열에서 부분 일치를 검사하는 데 활용
개념 확인
- CASE 문
- 조건에 따라 다른 값을 반환하는 제어 구조로, 다중 조건 처리가 가능합니다.
- 기본 구조 : CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ELSE 기본값 END
- LIKE 연산자
- 특정 문자열 패턴과의 일치를 검사
- % : 0개 이상의 문자를 대체하는 와일드카드로 사용
- _ : 정확히 한 개의 문자를 대체하는 와일드카드로 사용
*Useful link
This post is licensed under Park Juyoung by the author.