본문 바로가기
SQL/문제풀이

프로그래머스 동명 동물 수 찾기 풀이(MySQL)

by wakestand 2019. 9. 5.
반응형

사이트명 : 프로그래머스(Programmers)

문제명 : 동명 동물 수 찾기

SQL : MySQL

 

ANIMAL_INS 테이블에서 2번 이상 쓰인 NAME과 COUNT를 가져오는데 

COUNT는 ANIMAL_INS에 존재하는 컬럼명이 아닌

 

COUNT(컬럼명)을 해서 갯수를 가져오고 이름을 COUNT(컬럼명) AS COUNT 이렇게 주라는 거다

그리고 이름이 2번 이상 쓰여야 한다고 했으니 조건절에 이걸 추가해줘야 한다

 

내 풀이방법은 아래와 같은데

 

먼저 ANIMAL_INS 테이블에서 NAME과 NAME을 COUNT 한 갯수를 구한뒤 COUNT로 명명한다

COUNT를 사용하기 위해서 GROUP BY NAME을 해 줘야 한다

 

이후 이 쿼리 내용을 괄호로 감싸야 하는데

WHERE 절에 COUNT(NAME)을 바로 사용할 수 없기 때문에

한번 감싸서 밖에서 사용해야 하는데

이걸 서브쿼리라 한다

 

괄호로 감싼다고 끝나는 게 아니라

서브쿼리의 이름까지 정해줘야 하므로 SQ1가

그냥 붙인게 아니라는 것을 잊지 말자

 

이후 바깥에서 NAME와 COUNT를 조회하는데

여기서 WHERE에 COUNT가 2 이상인 값만 조회해야 하므로

WHERE COUNT >= 2를 추가해주면 된다

 

프로그래머스에 바로 적용 가능한 코드는 아래와 같다

 

SELECT NAME, COUNT
FROM (
    SELECT NAME, COUNT(NAME) AS COUNT
    FROM ANIMAL_INS
    GROUP BY NAME
    ) SQ1
WHERE COUNT >= 2

 

2019/09/05 수정

 

보니까 Subquery가 아닌 GROUP BY와 HAVING을 이용해서 풀라는게

문제의 요점같은데 HAVING을 안쓰고 Subquery를 써서 풀어버렸다

 

HAVING을 써서 풀자면 다음과 같은데

 

기본적으로 COUNT와 같은 집계함수(COUNT, AVG, SUM, MAX, MIN)를 써버리면

WHERE절에서

WHERE COUNT(NAME) >= 2

같은 WHERE절이 먹히지 않는다

 

WHERE절은 한 행마다 조건을 걸어 가져오는건데

COUNT(NAME)은 이미 묶어서 가져온 것이기 때문에

WHERE절이 통하지 않기 때문이다

 

그렇다면 COUNT(NAME)으로 묶어서 가져왔을 때 WHERE 절은 어떻게 추가하나?

HAVING을 사용해서 집계함수를 사용했더라도 조건을 걸어 조회할 수 있다

 

위 쿼리는 아래 코드블록에서 가져가면 된다

 

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
반응형

댓글