준호씨의 블로그

Programmers - SQL - String, Date 문제들 풀어보기 본문

개발이야기/PS - Problem Solving, 알고리즘

Programmers - SQL - String, Date 문제들 풀어보기

준호씨 2021. 3. 28. 23:55
반응형

 

 

Programmers - SQL - JOIN 문제들 풀어보기

Programmers - SQL - IS NULL 문제들 풀어보기 Programmers - SQL - GROUP BY 문제들 풀어보기 Programmers - SQL - SUM, MAX, MIN 문제들 풀어보기 Programmers - SQL - SELECT 문제들 풀어보기 프로그래머스에서..

junho85.pe.kr

지난번엔 JOIN 문제들을 풀어 보았고 이번에는 String, Date 문제들을 풀어봅니다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

루시와 엘라 찾기

 

코딩테스트 연습 - 루시와 엘라 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

동물 보호소에 들어온 동물 중 이름이 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_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

동물 보호소에 들어온 동물 이름 중, 이름에 "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

 

 

중성화 여부 파악하기

 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 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)

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회합니다. 보호 기간이 긴 순으로 정렬합니다.

일단 보호 기간을 구하려면 나간 날짜에서 들어온 날짜를 빼야 됩니다. 서브 쿼리에서 두 테이블을 조인하고 두 날짜의 차이를 구합니다. 해당 서브 쿼리의 결과를 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로 형 변환

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

datetime의 포맷을 date형으로 바꿉니다. date_format함수를 이용하면 됩니다. date_format함수의 표현식 규칙은 MySQL 공식 홈페이지의 내용을 참고합니다. % Y는 연도, % m은 월, % d는 일입니다.

select animal_id, name, date_format(datetime, '%Y-%m-%d') 날짜
from animal_ins
반응형
Comments