해당 문제를 풀이하는데 핵심은 집계함수를 사용할줄 아느냐(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
'개인공부 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 직사각형 넓이 구하기 (Kotlin) (0) | 2023.08.01 |
---|---|
프로그래머스 - 캐릭터의 좌표 (Kotlin) (0) | 2023.07.31 |
프로그래머스 - 고양이와 개는 몇마리 있을까? (MySQL) (0) | 2023.07.29 |
프로그래머스 - 최댓값 만들기(2) (Kotlin) (0) | 2023.07.28 |
프로그래머스 - 다항식 더하기 (Kotlin) (0) | 2023.07.27 |