금일 막힌 문제 : 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성
*결과는 이름이 없는 동물은 집계에서 제외,
*이름 순으로 조회
막힌 부분 : 비교적 간단해 보였으나, 동물 이름 중 두번 이상 쓰인 이름만을 조회하는 부분에서 다소 막혀
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 // 이름 순으로 정렬