[프로그래머스/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. 문제 푸는 순서
- 물고기 타입에 따라 그룹으로 나눠서 개수를 센다.
- 나온 결과에서 FISH_NAME_INFO의 이름과 합친다
- 잡은 수 기준으로 내림차순 정렬한다,
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에서 다른 컬럼을 불러낼 수 없기 때문에 서브 쿼리를 사용하는 점도 알게 되었습니다.
'코딩테스트 > SQL' 카테고리의 다른 글
[프로그래머스/MySQL] 대여횟수가 많은 자동차들의 월별 대여 횟수 구하기 풀이 (GROUP BY, DATE_FORMAT, WHERE 서브쿼리, MONTH) (0) | 2025.03.13 |
---|---|
[프로그래머스/SQL] 연도 별 미세먼지 농도 조회하기 풀이 (ROUND, DATE_FORMAT, YEAR) (0) | 2025.03.12 |
댓글