[ORACLE] 프로그래머스 동명 동물 수 찾기
2021. 3. 11.
반응형

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

 

1. 서론

 

group by - having의 개념을 배우기 좋은 문제

 

2. 문제 풀이

 

ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블

테이블 구조

ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE

(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)

 

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

 

문제를 해석하자면 대략 이렇다.

 

1. 두 번 이상 쓰인 이름, 그 이름이 쓰인 횟수 조회

2. null 제외

3. 이름 순으로 정렬

 

그런데 여기서 문제가 생긴다. 횟수라는 것은 count 함수를 써야 한다는 뜻이다. 이 말은 즉, group by를 해야 한다.

그런데 우리는 두 번 이상 이름이 쓰였다는 것을 조건절로 알아내야 한다. 하지만 group by를 쓰면 where을 사용할 수 없다.

이때 group by에 짝꿍처럼 따라오는 것이 having절이다. where절 대신 having을 쓰면 문제를 풀 수 있다.

 

3. 코드 설명

 

SELECT name, count(name)
FROM animal_ins
GROUP BY name
HAVING count(name) >= 2
ORDER BY name;

 

함수를 사용했기 때문에 group by를 사용하는데 이 때 having으로 조건이었던 두 번 이상 쓰이는 이름을 걸러낼 수 있는 것이다.

 

 

 

 

반응형
myoskin