본문 바로가기

코딩 테스트 연습/SQL

[ 코딩 테스트 ] 동명 동물 수 찾기

문제

조건

정답

SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS
WHERE NAME is NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME;

 


 

후기

 

WHERE 은 행을 필터링 하는데 사용

HAVING 은 그룹을 필터링 하는데 사용

 

집계 함수인 HAVING 과 함께 사용할 수 있지만

WHERE 은 HAVING 에 포함된 하위 쿼리에 있지 않으면 집계 함수와 함께 사용할 수 없다

※ 집계 함수 : COUNT, MIN, MAX, SUM, AVG 등 ...

SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1;

 

HAVING 는 그룹에 대한 필터링이기 때문에 GROUP BY 뒤에 사용해야 에러가 나지 않는다

반대로 WHERE 은 GROUP BY 앞에 사용해야 한다

 

정리하자면 GROUP BY 의 조건문을 쓸 때는 HAVING 를 사용하면 된다

꼭 GROUP BY 뒤에 적기

 

사실 저렇게 해놓고 제출 했다가 틀렸다고 퇴짜 맞았다

이렇게 해도 코드 실행을 눌렀을 때 나와야 하는 모습과 동일하게 나와서

나처럼 결과 똑같이 잘 나왔는데 왜 틀렸지?? 라고 생각한다면

문제를 다시 한번 잘 읽어보자

 

분명 문제에서 말한 NULL 값 제외, 이름 순이라는 글이 있을 것이다

 

이름 카운트 했고 그룹화 해줬고 NULL 없앴으니 됐겠지? (룰루랄라
했었는데 어림도 없었다 ㅋㅎㅋㅎ

 

 

이름이 쓰인 횟수

=> COUNT 사용

 

이름이 없는 동물을 집계에서 제외

=> WHERE NAME is NOT NULL

 

동물 이름 중 두 번 이상 쓰인 이름

=> HAVING COUNT(NAME) > 1

 

이름 순으로 조회

=> ORDER BY NAME