My SQL / sublime
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
풀이
제출한 오답 1
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, REPLACE(SEX_UPON_INTAKE,'Neutered','O')
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
-> '문자열 치환'이라고 검색하여 REPLACE를 알아냈다. 문제는 'Neutered'와 'Spayed' 둘 다 'O'로 치환되어야 하는 것이다. 그리고 위와 같이 조회하면 'O Male'과 같은 결과가 나온다.
몰랐던 문법 1
REPLACE (컬럼명, '기존문자열', '변경문자열')
다시 '문자열 치환 여러개'로 검색한 결과 CASE 문을 발견!
제출한 답
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE ='Neutered Male' THEN 'O'
WHEN SEX_UPON_INTAKE ='Spayed Female' THEN 'O'
ELSE 'X' END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
몰랐던 문법 2
CASE
WHEN 조건 1 THEN 출력 데이터 1
WHEN 조건 2 THEN 출력 데이터 2
...
ELSE 출력 데이터 x
END
다른 방법은 없을까?
다른 답
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME,
(CASE WHEN SEX_UPON_INTAKE REGEXP 'Neutered Male|Spayed Female' THEN 'O'
ELSE 'X' END) AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
-> CASE WHEN 과 REGEXP를 혼합해서 사용하면 여러 문자열에 대해 치환도 적용할 수 있고 나머지 케이스에 대해서도 정의해줄 수 있다.
몰랐던 문법 3
WHERE 컬럼 A REGEXP '문자열 1|문자열 2|'
-> 조건: 컬럼 A에서 '문자열 1' 또는 '문자열 2'을 포함한 값
아래와 같이 LIKE를 활용하는 것보다 간결하게 작성할 수 있음
WHERE 컬럼 A LIKE '%문자열 1%' OR 컬럼 A LIKE '%문자열 2%'...
'데이터 분석 > SQL 연습문제' 카테고리의 다른 글
627. Swap Salary (LeetCode) (0) | 2022.09.15 |
---|---|
코테 연습 26일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.03.09 |
코테 연습 24일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.03.07 |
코테 연습 23일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.03.05 |
코테 연습 22일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.03.01 |
댓글