[프로그래머스_MySQL]중성화 여부 파악하기(REGEXP)

hyeji·2022년 12월 19일
0
💡 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 `SEX_UPON_INTAKE`컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SEX_UPON_INTAKE에 ‘Neutered’ 와 ‘Spayed’가 포함된 행을 찾으면 되는 문제여서 LIKE 함수를 사용했다.

SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE LIKE '%Neutered%Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

근데 틀렸음 !!

중성화에 모두 X만 떴다.

SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR '%Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

처음에 이렇게 하면 LIKE ('%Neutered%' OR '%Spayed%') 이렇게 적용되는 줄 알았는데 실행해보니까 (SEX_UPON_INTAKE LIKE '%Neutered%') OR '%Spayed%' 이렇게 적용돼서 또 틀림!!

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;

OR을 쓰려면 저렇게 길게 적어야한다.

근데 LIKE '%A%B%' 이렇게 쓰면 A or B 포함하는 거 찾아준다고 하던데…

다시 알아봐야겠따!

암튼 그래서 LIKE를 여러 번 사용해야 할 때는 LIKE보다 REGEXP를 사용하는 게 더 낫다.

SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE REGEXP 'Neutered|Spayed','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

REGEXP를 사용할 때 찾고 싶은 단어 사이에 ‘|’ 이 기호를 넣어주면 됨

IF문 말고 CASE WHEN도 있는데 이것도 함 써봤다

SELECT ANIMAL_ID, NAME, 
CASE WHEN SEX_UPON_INTAKE REGEXP 'Neutered|Spayed' THEN 'O'
ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

CASE WHEN 보다 REGEXP가 훨씬 간편하니까 이런 상황에서는 REGEXP를 쓰도록 하자~

profile
Data Analyst

0개의 댓글