카테고리 없음

2024-03-18 [SQL_ 동명 동물 수 찾기]

Glen_check 2024. 3. 18. 17:50

금일 막힌 문제 : 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성

*결과는 이름이 없는 동물은 집계에서 제외,

*이름 순으로 조회

 

[ANIMAL_INS]의 테이블 구조

 

막힌 부분 : 비교적 간단해 보였으나, 동물 이름 중 두번 이상 쓰인 이름만을 조회하는 부분에서 다소 막혀

1. WHERE 조건 절에 'WHERE NAME IS NOT NULL AND COIUNT(NAME) >= 2'을 활용해야 하는지,

SELECT 절에 IF문을 활용하는 방안이 있을까 고민해 보았으나

입출력 답안과는 다르게 출력되거나 오류가 지속적으로 발생하여 '질문하기'에서 답안을 참고해 보았다.

 

그리고 HAVING 절을 활용해야 한다는 것을 확인했다.

 

HAVING 절 ?

WHERE 절에서는 집계함수를 사용 할 수 없다.

HAVING 절은 집계함수를 가지고 조건 비교 할 때 사용하며,

HAVING절은 GROUP BY절과 함께 사용한다.

 

정답 코드 :

SELECT NAME,
COUNT(NAME) COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME

 

문제 풀이 :

1) WHERE NAME IS NOT NULL // NAME이 없는 동물들은 제외

2) GROUP BY NAME // 각 이름 별 정렬이 필요하기 때문에 GROUP BY 절 활용 필요

3) HAVING COUNT(NAME) >= 2 // 그룹별 집계된 결과 중 원하는 조건의 결과만 필터링하기 위해 HAVING 절 활용 필터 조건을 사용

4) ORDER BY NAME // 이름 순으로 정렬