일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- JOIN
- BFS
- 다익스트라
- 크루스칼
- Baekjoon
- SQL
- django
- Java
- SQL코딩테스트
- OrderBy
- 프림
- union find
- 프로그래머스
- 누적합
- GROUPBY
- EC2
- db
- 최단경로
- 그래프 탐색
- 자바
- 피로그래밍
- MST
- 배포
- 알고리즘
- 구현
- Pirogramming
- Database
- AWS
- 코딩테스트
Archives
- Today
- Total
NullNull
프로그래머스 SQL 중성화 여부 파악하기 본문
Data 구조
ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블
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'라고 표시해줏세요.
예시
Input:
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 |
Output:
ANIMAL_ID | NAME | 중성화 |
A355753 | Elijah | O |
A373219 | Ella | O |
A382192 | Maxwell 2 | X |
정답:
기존의 데이터에서 특정 조건을 만족하는 여부에 따라 새로운 컬럼을 하나 생성하고 값을 지정해서 결과로 추출해야 합니다. 해당 문제는 2가지 방법으로 풀 수 있습니다.
1. CASE
2. IF
1. CASE
CASE의 문법은 다음과 같습니다.
CASE WHEN (조건) THEN (참일때의 결과) ELSE (거짓일 때의 결과) END
조건의 수는 꼭 하나일 필요는 없습니다.
CASE WHEN (조건 1) THEN (조건 1이 참일 때의 결과)
WHEN (조건 2) THEN (조건 2가 참일 때의 결과)
ELSE (조건 1과 조건 2가 모두 거짓일 때의 결과) END
우리는 중성화가 된 동물의 SEX_UPON_INTAKE 컬럼에는 Neutered 혹은 Spayed 가 들어간다는 것을 압니다. 따라서 LIKE와 CASE를 적절하게 활용하여 쿼리문을 작성합니다.
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
물론 조건을 하나로 합치지 않고 두개로 분리해도 됩니다.
SELECT ANIMAL_ID, NAME,
CASE
WHEN (SEX_UPON_INTAKE LIKE '%Neutered%') THEN 'O'
WHEN (SEX_UPON_INTAKE LIKE '%Spayed%') THEN 'O'
ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
2. IF 문의 문법은 다음과 같습니다.
IF(조건, 참일 경우, 거짓일 경우)
따라서 조건 부분에 중성화 여부를 확인하는 질의를 적어주면 됩니다. 위의 CASE문과 크게 다른 점은 없습니다.
SELECT ANIMAL_ID, NAME,
IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
'SQL' 카테고리의 다른 글
프로그래머스 SQL DATETIME에서 DATE로 형 변환 (0) | 2022.03.01 |
---|---|
프로그래머스 SQL 오랜 기간 보호한 동물(2) (0) | 2022.03.01 |
프로그래머스 SQL 이름에 el이 들어가는 동물 찾기 (0) | 2022.03.01 |
프로그래머스 SQL 루시와 엘라 찾기 (0) | 2022.03.01 |
프로그래머스 SQL 보호소에서 중성화한 동물 (0) | 2022.03.01 |
Comments