노트1/SQL

[MySQL] 프로그래머스 문제풀이 : LIKE와 IN, 와일드카드%

Paige09 2021. 12. 13. 17:27

프로그래머스 > 코딩테스트 연습 > SQL 고득점 Kit

https://programmers.co.kr/learn/challenges

https://programmers.co.kr/learn/courses/30/lessons/59045

https://programmers.co.kr/learn/courses/30/lessons/59409

 

 

 

 

 

[보호소에서 중성화한 동물]

 

SELECT i.animal_id, i.animal_type, i.name
FROM animal_ins i INNER JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.sex_upon_intake LIKE '%Intact%'
-- 또는 i.sex_upon_intake IN ('Intact Male','Intact Female')
        AND (o.sex_upon_outcome LIKE '%Spayed%' 
             OR o.sex_upon_outcome LIKE '%Neutered%')
        -- 또는 AND o.sex_upon_outcome NOT LIKE '%Intact%' 
ORDER BY i.animal_id

 

 

 

 

[중성화 여부 파악하기]

 

처음 작성한 코드

SELECT animal_id, name,
    CASE WHEN SEX_UPON_INTAKE LIKE ('%Neutered%' OR '%Spayed%') THEN 'O'
    ELSE 'X'
    END as 중성화
FROM animal_ins
ORDER BY animal_id

 

 

LIKE 를 사용해 여러 검색 조건을 주려면, 아래와 같이 사용해야 함.

LIKE 절에는 필드값을 하나씩만!

 

WHEN SEX_UPON_INTAKE LIKE '%Neutered%'

OR

WHEN SEX_UPON_INTAKE LIKE  '%Spayed%'

 

 

 

수정한 답안.

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

 

 

(+)

SEX_UPON_INTAKE IN ('%Neutered%', '%Spayed%')

IN과 와일드카드% 조합은 작동하지 않음.