개인공부/알고리즘
프로그래머스 - 동명 동물 수 찾기 (MySQL)
KEEMSY
2023. 7. 30. 00:12
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 문제를 풀이하는데 핵심은 집계함수를 사용할줄 아느냐(COUNT), 집계함수에 조건을 추가할 수 있는가(HAVING) 이다.
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT >= 2
ORDER BY NAME
이 문제에서 질문의 수가 많아 한번 확인해보았는데, 생각보다 WHERE 절과 HAVING 절의 차이를 모르는 사람들이 많은듯하였다.
- WHERE 절: 조건이 개별 행 값에 적용되어 조건을 만족하는 행만 결과에 포함된다.
- HAVING 절: 집계가 수행된 후, 결과를 필터링한다. 이 때, 개별 행이 아닌 행 그룹에서 작동한다.
문제로 설명을 이어가본다면, 다음과같다.
WHERE NAME IS NOT NULL
1. (SELECT 와 FROM에서 어떤 테이블에서 어떤 열을 가져올지 지정하고) 데이터 모음에서, 데이터를 필터링(NAME 이 NULL 이 아닌 데이터들) 한다. 이는 그룹화 및 집계(있는경우)가 발생하기 전에 이뤄진다.
GROUP BY NAME
2. 지정된 열(NAME)을 기준으로 행을 그룹화 한다. 이때 해당 열은 집계함수와 함께 사용된다.
HAVING COUNT >= 2
3. GROUP BY 절에 의해 생성된 그룹을 집계함수와 관련된 조건(COUNT >= 2)에 따라 필터링 한다.
ORDER BY NAME
4. 열(NAME) 을 기준으로 결과 데이터를 정렬한다.
이렇게보면, 쿼리의 작동순서를 알고 있다면, 해당 문제를 쉽게 해결할 수 있다.
728x90