SQL

[ORACLE] 프로그래머스 중성화 여부 파악하기

랩실외톨이 2021. 5. 27. 06:43
반응형

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

 

1. 서론

 

못 풀겠어서 깜짝 놀람! Case when문을 써서 푸는 문제.

 

2. 문제 풀이

 

ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블

테이블 구조

ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE

(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)

 

Q. 중성화된 동물은 SEX_UPON_INTAKE 칼럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

 

즉, sex_upon_intake 칼럼에 'Neutered' 또는 'Spayed'가 들어가 있다면 O 아니면 X라고 표시해야 하는 문제다.

근데 쿼리 짜면서 Case when 쓴 적이 없어서 어떻게 하는지 몰라서 검색하다가 알게 됨.

 

출처: https://gent.tistory.com/311

 

[Oracle] 오라클 CASE WHEN 표현식 사용법

오라클에서 if 문과 비슷한 기능을 하는 DECODE 함수가 있다. 그러나 DECODE 함수는 조건이 많아지면 가독성이 떨어지고 복잡해지며, 가장 큰 문제는 오라클 SQL에서만 사용할 수 있는 비표준 함수이

gent.tistory.com

 

ex) CASE WHEN [조건] THEN [리턴 값]

 (생략 가능) ELSE

      END AS [붙이고 싶은 이름] // 꼭 as는 없어도 됨

 

CASE문을 사용하면 if문을 사용하는 것과 동일하게 값을 출력할 수 있다!

이걸 사용할 수 있는가가 이 문제의 핵심이다. 이걸 모르면 그냥 못 푸는 거니까 정말 슬프다 ~.~

 

3. 코드 설명

 

SELECT animal_id, name, 
    CASE WHEN sex_upon_intake like 'Intact%' THEN 'X'
         ELSE 'O'
    END AS 중성화
FROM animal_ins
ORDER BY animal_id;

 

문제에서는 'Neutered' 또는 'Spayed'가 있는 경우 O이고 아니면 X라고 했는데 문제에 주어진 테이블을 보니까 두 개의 경우가 더 많고 X에 해당하는 'Intact'가 나와있길래 그냥 그것만 X라고 하고 나머지를 O라고 해줬다. 두 줄로 쓰기 싫어서,, ㅎㅎ

솔직히 내가 모르는 값이 또 있어서 틀렸다고 나올 줄 알았는데 이 세 가지 경우 밖에 없나 보다.

 

 

 

반응형