문제
조건
정답
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
'코딩 테스트 연습 > SQL' 카테고리의 다른 글
[ 코딩 테스트 ] 상위 n개 레코드 (0) | 2024.04.29 |
---|---|
[ 코딩 테스트 ] 아픈 동물 찾기 (0) | 2024.04.29 |
[ 코딩 테스트 ] 동물 수 구하기 (0) | 2024.04.26 |
[ 코딩 테스트 ] 동물의 아이디와 이름 (0) | 2024.04.26 |
[ 코딩 테스트 ] 중복 제거하기 (0) | 2024.04.26 |