준호씨의 블로그
Programmers - SQL - String, Date 문제들 풀어보기 본문
지난번엔 JOIN 문제들을 풀어 보았고 이번에는 String, Date 문제들을 풀어봅니다.
루시와 엘라 찾기
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL을 작성합니다. in을 사용해서 이름들을 하나하나 넣어서 검색하면 됩니다.
select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
이름에 el이 들어가는 동물 찾기
동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회합니다. 결과는 이름 순입니다. 이름의 대소문자는 구분하지 않습니다.
animal_type은 Dog로 하합니다. name은 like문을 사용합니다. name like '%el%'을 사용하면 el이 포함된 모든 이름을 찾습니다. like문은 기본적으로 대소문자를 구분하지 않습니다.
select animal_id, name
from animal_ins
where animal_type = 'Dog'
and name like '%el%'
order by name
중성화 여부 파악하기
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE칼럼에 'Neutered'또는 'Spayed'가 들어갑니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회합니다. 중성화되어있다면 'O', 아니면 'X'로 표시합니다.
if 문을 사용합니다. sex_upon_intake에 Neutered 또는 Spayed가 들어갔는지 여부는 REGEXP 함수를 사용하여 판단합니다. REGEXP는 정규표현식을 사용하는 함수입니다. 정규표현식에서 or을 표현하는 방법은 '|'를 사용합니다.
select animal_id, name, if (`sex_upon_intake` REGEXP ('Neutered|Spayed'), 'O', 'X')
from animal_ins
order by animal_id
오랜 기간 보호한 동물(2)
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회합니다. 보호 기간이 긴 순으로 정렬합니다.
일단 보호 기간을 구하려면 나간 날짜에서 들어온 날짜를 빼야 됩니다. 서브 쿼리에서 두 테이블을 조인하고 두 날짜의 차이를 구합니다. 해당 서브 쿼리의 결과를 select 하고 날짜 차이 순으로 정렬합니다. 두 마리이니 limit 2를 해줍니다.
select animal_id, name
from (
select o.animal_id, o.name, o.datetime - i.datetime term
from animal_outs o
join animal_ins i on o.animal_id = i.animal_id
) t
order by term desc
limit 2
DATETIME에서 DATE로 형 변환
datetime의 포맷을 date형으로 바꿉니다. date_format함수를 이용하면 됩니다. date_format함수의 표현식 규칙은 MySQL 공식 홈페이지의 내용을 참고합니다. % Y는 연도, % m은 월, % d는 일입니다.
select animal_id, name, date_format(datetime, '%Y-%m-%d') 날짜
from animal_ins
'개발이야기 > PS - Problem Solving, 알고리즘' 카테고리의 다른 글
Programmers - SQL - JOIN 문제들 풀어보기 (0) | 2021.03.27 |
---|---|
Programmers - SQL - IS NULL 문제들 풀어보기 (0) | 2021.03.26 |
Programmers - SQL - GROUP BY 문제들 풀어보기 (0) | 2021.03.25 |
Programmers - SQL - SUM, MAX, MIN 문제들 풀어보기 (0) | 2021.03.24 |
Programmers - SQL - SELECT 문제들 풀어보기 (1) | 2021.03.21 |