본문 바로가기
코딩테스트/SQL

[프로그래머스/MySQL] 물고기 종류 별 잡은 수 구하기 풀이 (GROUP BY, 서브쿼리, SQL 고득점 kit)

by JI NY 2025. 2. 20.

[프로그래머스/MySQL] 물고기 종류 별 잡은 수 구하기 풀이

(GROUP BY, 서브쿼리, SQL 고득점 kit )

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/293257

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


2. 정답

SELECT COUNT(FISH_TYPE) AS FISH_COUNT,
    (
        SELECT B.FISH_NAME
     FROM FISH_NAME_INFO AS B
     WHERE FISH_INFO.FISH_TYPE = B.FISH_TYPE 
    ) AS FISH_NAME
FROM FISH_INFO
GROUP BY FISH_TYPE
ORDER BY FISH_COUNT DESC

3. 풀이

3.1. 문제 푸는 순서 

  1. 물고기 타입에 따라 그룹으로 나눠서 개수를 센다.
  2. 나온 결과에서 FISH_NAME_INFO의 이름과 합친다
  3. 잡은 수 기준으로 내림차순 정렬한다,

 

3.2. 순서 별 풀이

1. 물고기 타입에 따라 그룹으로 나눠서 개수를 센다.

- 그룹으로 나누기 위해서는 GROUP BY 함수가 필요합니다.

- GROUPBY를 이용해서 'FISH_TYPE'을 기준으로 그룹핑했고, COUNT() 함수를 사용하여 FISH_TYPE 별 개수를 세어 줬습니다.

SELECT COUNT(FISH_TYPE) AS FISH_COUNT
FROM FISH_INFO
GROUP BY FISH_TYPE

 

2. 나온 결과에서 FISH_NAME_INFO의 이름과 합친다. 

- '스칼라 서브 쿼리'를 이용하여, SELECT문에 FISH_TYPE이 같은 FISH_NAME을 합쳐줬습니다.

- 서브 쿼리를 사용하는 이유는, GROUP BY로 그루핑 결과가 나오면, 그 이외 다른 컬럼은 SELECT 문에서 확인할 수 없기 때문입니다.

    (
        SELECT B.FISH_NAME
     FROM FISH_NAME_INFO AS B
     WHERE FISH_INFO.FISH_TYPE = B.FISH_TYPE 
    ) AS FISH_NAME

3. 잡은 수 기준으로 내림차순 정렬한다. 

- ORDER BY 함수를 이용하여 정렬합니다. 이때 'DESC' 속성을 추가하여, 잡은 수(FISH_COUNT)를 기준으로 내림차수 정렬했습니다. (오름차순은 ASC 혹은 그대로 두기)

ORDER BY FISH_COUNT DESC

 

 

4. 후기

간단한 문제지만 아직 SQL이 익숙하지 않아서 더 연습이 필요할 것 같습니다.

특히 GROUP BY의 기준이 되는 컬럼을 제외하고, SELECT에서 다른 컬럼을 불러낼 수 없기 때문에 서브 쿼리를 사용하는 점도 알게 되었습니다.

댓글