반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59045

 

코딩테스트 연습 - 보호소에서 중성화한 동물

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

programmers.co.kr

 

중성화 기준 나와있지않아서 종류를 확인했습니다.

select SEX_UPON_OUTCOME
from ANIMAL_OUTS
group by SEX_UPON_OUTCOME

 

아 그러면 4가지 경우를 고려해서 결과를 도출하면 되겠구나 해서 아래와 같이 작성했습니다. 

-- 코드를 입력하세요

SELECT a.ANIMAL_ID, a.ANIMAL_TYPE, a.NAME
from ANIMAL_OUTS as a 
inner join ANIMAL_INS as b on a.ANIMAL_ID = b.ANIMAL_ID
where (b.SEX_UPON_INTAKE like 'Intact Male' and a.SEX_UPON_OUTCOME like 'Neutered Male' ) 
   or (b.SEX_UPON_INTAKE like 'Intact Female' and a.SEX_UPON_OUTCOME like 'Spayed Female')
order by a.ANIMAL_ID

 

반응형
반응형

문제링크: programmers.co.kr/learn/courses/30/lessons/59044

 

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

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

programmers.co.kr

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

 

입양을 못 간 동물중에서 조회하는것이기 때문에 ANIMAL_INS 기준으로 조인이 이루어져야 합니다.

즉 INS 위치에 따라 left 와 right 중에서 선택해야합니다.

 

limit와 order by로 쉽게 구현했습니다.

 

아래는 정답코드입니다.

select b.NAME,b.DATETIME
from ANIMAL_OUTS as a
right outer join ANIMAL_INS as b on a.ANIMAL_ID = b.ANIMAL_ID
where a.DATETIME is null
order by b.DATETIME asc
limit 3;
반응형
반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59043

 

코딩테스트 연습 - 있었는데요 없었습니다

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

programmers.co.kr

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

 

 

 

조인을 통해서 문제를 해결해야 합니다.

보호시작일과 입양일을 비교하면 되는 문제입니다.

어떤 조인을 선택해야할지 고민했는데 생각해보니 left, right, inner 전부 가능합니다.

 

두 교집합을 출력하는 문제이기 때문입니다. 

 

 

 

아래는 2개의 정답 코드입니다.

-- 코드를 입력하세요
select a.ANIMAL_ID, a.NAME
from ANIMAL_OUTS as a
inner join ANIMAL_INS as b on a.ANIMAL_ID = b.ANIMAL_ID
where a.DATETIME < b.DATETIME
order by b.DATETIME
-- 코드를 입력하세요
/*
SELECT 
  a.ANIMAL_ID, 
  a.NAME 
 FROM ANIMAL_OUTS AS a
 LEFT OUTER JOIN ANIMAL_INS AS I ON I.ANIMAL_ID = a.ANIMAL_ID 
WHERE  I.datetime > a.datetime
ORDER BY I.datetime;
*/
반응형
반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59042

 

코딩테스트 연습 - 없어진 기록 찾기

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

programmers.co.kr

천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

 

 

조인을 통해서 문제를 해결해야 합니다.

입양기록만 있고 보호소 기록이 없는 상태이므로 ANIMAL_OUTS을 기준으로 조인 해주면 됩니다.

ANIMAL_OUTS 위치에 따라서 left 조인, right 조인 둘다 가능합니다.  외래키와 주키인 ANIMAL_ID를 통해서 연결하고 OUTS의 ID와 NAME 출력하면 되는 문제입니다.

 

 

아래는 2개의 정답 코드입니다.

select a.ANIMAL_ID, a.NAME
from ANIMAL_OUTS as a
left outer join ANIMAL_INS as b on a.ANIMAL_ID = b.ANIMAL_ID
where b.ANIMAL_ID is null
order by a.ANIMAL_ID


select b.ANIMAL_ID, b.NAME
from ANIMAL_INS as a
right outer join ANIMAL_OUTS as b on a.ANIMAL_ID = b.ANIMAL_ID
where a.ANIMAL_ID is null
반응형
반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59410

 

코딩테스트 연습 - NULL 처리하기

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

programmers.co.kr

 

IFNULL 을 통해서  NULL이라는 기호를 다른 값으로 대체할 수 있습니다.

 

 

아래는 정답코드입니다. 

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") as NAME, SEX_UPON_INTAKE
from ANIMAL_INS 
order by ANIMAL_ID
반응형
반응형

문제링크: programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

이전 입양 시각 구하기(1)처럼 하게 되면 count가 0일때 값들이 나오지 않습니다. 즉, 모든 시간대(0시~23시)를 조회해야 합니다.

쿼리문에서 로컬 변수를 활용하는 문제를 사용하는 문제입니다..

 

이를 위해서 set을 사용했습니다.

 

아래는 정답코드입니다.

set @hour := -1;
SELECT 
    (@hour := @hour + 1) as HOUR,
    (select count(*) from animal_outs where hour(datetime) = @hour) as COUNT
from 
    animal_outs
where
    @hour < 23;
    

 

반응형
반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59412

 

코딩테스트 연습 - 입양 시각 구하기(1)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

hour를 알아야 풀 수 있는 문제였습니다.

 

count(datetime) as count를 통해서 시간대별 입양 횟수를 구할 수 있습니다. ( group by hour 로 묶여있기 때문에)

 

 

 

정답코드입니다.

-- 코드를 입력하세요
SELECT hour(datetime) as hour, count(datetime) as count
from ANIMAL_OUTS 
group by hour having hour >= 9 and hour <=19
order by hour

 

반응형
반응형

문제링크:programmers.co.kr/learn/courses/30/lessons/59041

 

코딩테스트 연습 - 동명 동물 수 찾기

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

programmers.co.kr

 

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

 

주어진 조건을 하나씩 만족하다보면 쉽게 구할 수 있습니다.

 

  • 두 번 이상 쓰인 이름과 -> group by  name having count(name) > 1
  • 이름이 없는 동물은 집계에서 제외하며 -> where name is not null 
  • 결과는 이름 순 -> order by name 

 

아래는 정답코드입니다.

-- 코드를 입력하세요
SELECT name, count(name) as count from ANIMAL_INS
where name is not null 
group by  name having count(name) > 1
order by name 
반응형

+ Recent posts