https://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_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

-- 코드를 입력하세요
SELECT o.animal_id, o.name
from animal_ins i right join animal_outs o
on i.animal_id = o.animal_id
where i.animal_id is null
order by 1, 2


https://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


입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

-- 코드를 입력하세요
SELECT animal_type, nvl(name,'No name') as name, sex_upon_intake
from animal_ins
order by animal_id

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

코딩테스트 연습 - 이름이 있는 동물의 아이디

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

programmers.co.kr


동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

-- 코드를 입력하세요
SELECT animal_id
from animal_ins
where name is not null
order by animal_id

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

동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

-- 코드를 입력하세요
SELECT animal_id
from animal_ins
where name is null
order by animal_id

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

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




#1. 시간대별 입양건수 집계하기
-- 코드를 입력하세요
SELECT to_char(datetime,'HH24') as HOUR, count(*)
from animal_outs
group by to_char(datetime,'HH24')
order by 1

이렇게 하면 입양이 없는 시간대는 나타나지 않았다..


#2. 시간대별 데이터 생성하기
00시 부터 23시까지 숫자가 있는 데이터 생성

select to_char('00') + level -1 as hour
from dual
connect by level between 00 and 24




#3. 두 테이블 조인
nvl을 사용해서, a에 데이터가 null 이면, 0으로 치환
b의 시간을 기준으로, a시간 아우터 조인

-- 코드를 입력하세요
select b.hour as hour
,nvl(a.count,0) as count
from (select to_char(datetime,'HH24') as hour
, count(*) as count
from animal_outs
group by to_char(datetime,'HH24')
order by 1
) a
,(select to_char('00') + level -1 as hour
from dual
connect by level between 00 and 24
) b
where b.hour = a.hour(+)
order by 1


https://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문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.



select to_char(datetime,'hh24') as Hour, count(*)
from animal_outs
where to_char(datetime,'hh24:mi') between '09:00' and '19:59'
group by to_char(datetime,'hh24')
order by 1;




*** hh로 하면 안됨..
시간포멧
hh&hh12 = 12시간제로
hh24 : 24시간제

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

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


-- 코드를 입력하세요
SELECT name, count(*)
from animal_ins
group by name
having count(name)>1
order by name

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

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

-- 코드를 입력하세요
SELECT animal_type, count(*)
from animal_ins
where animal_type in('Cat', 'Dog')
group by animal_type
order by animal_type

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

코딩테스트 연습 - 중복 제거하기

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

programmers.co.kr


동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

-- 코드를 입력하세요
SELECT count(distinct(name))
from animal_ins

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

코딩테스트 연습 - 상위 n개 레코드

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

programmers.co.kr


MySQL : LIMIT으로 ORDER BY 까지 정렬한 결과 바탕으로 가져옴
Oracle : ROWNUM은 정렬되기 전 원래 데이터에 번호를 매김

-- 코드를 입력하세요
SELECT name
from ( select name from animal_ins order by datetime )
where rownum=1

+ Recent posts