본문 바로가기
Coding Test/SQL Coding Test

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

by nam_ji 2024. 10. 28.

물고기 종류 별 잡은 수 구하기 - LV.2

문제

  • 낚시앱의 FISH_INFO 테이블은 잡은 물고기들의 정보를 FISH_NAME_INFO 테이블은 물고기의 이름 정보를 담고 있습니다.
  • FISH_INFO 테이블의 ID는 물고기 ID, FISH_TYPE: 물고기의 종류(숫자), LENGTH: 잡은 물고기의 길이(cm), TIME: 물고기를 잡은 날짜를 나타냅니다.
  • 단, 잡은 물고기의 길이가 10cm 이하일 경우 LENGTH는 NULL이고, LENGTH에 NULL만 있는 경우는 없습니다.
  • FISH_NAME_INFO 테이블은 FISH_TYPE: 물고기의 종류(숫자), FISH_NAME: 물고기의 이름(문자)을 나타냅니다.
  • 문제
    1. FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를
    2. 물고기 이름 컬럼명은 FISH_NAME, 잡은 수 컬럼명은 FISH_COUNT로
    3. 잡은 수 내림차순으로 출력하는 문제입니다.


프로그래머스 코드

  • 먼저 SELECT문으로 조회하고 싶은 데이터 설정을 합니다.
  • 잡은 수를 나타내는 FISH_INFO의 FISH_TYPE을 COUNT 함수로 구하고 AS로 컬럼명을 FISH_COUNT로 변환해줍니다.
  • FISH_NAME_INFO 테이블의 FISH_NAME을 SELECT문 안에 작성하고
  • 두 개의 테이블을 사용하기 때문에 FROM으로 조회하고 싶은 테이블 하나를 지정하고 JOIN으로 나머지 테이블 하나를 작성합니다.
  • ON절을 통해 두 테이블이 연관이 있다는 것을 검증하고 (공통으로 갖고 있는 FISH_TYPE 컬럼 비교)
  • 물고기의 종류 별 잡은 수를 구하기 위해 GROUP BY 절로 FISH_NAME_INFO 테이블의 FISH_NAME을 기준으로 GROUP 하고 COUNT 했던 컬럼 기준으로 DESC 내림차순 정렬해주면 됩니다.
-- 코드를 작성해주세요
SELECT 
    COUNT(FI.FISH_TYPE) AS FISH_COUNT,
    FN.FISH_NAME
FROM FISH_INFO AS FI
JOIN FISH_NAME_INFO AS FN
ON FI.FISH_TYPE = FN.FISH_TYPE
GROUP BY FN.FISH_NAME
ORDER BY COUNT(FI.FISH_TYPE) DESC;