잡은 물고기의 정보를 담고 있는 FISH_INFO 테이블과 물고기의 이름에 대한 정보를 담고 있는 FISH_NAME_INFO 테이블이 있습니다.
FISH_INFO 테이블은 ID, FISH_TYPE, LENGTH, TIME의 컬럼이 존재하고 각각 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이, 물고기 잡은 날짜를 나타냅니다.
FISH_NAME_INFO 테이블은 FISH_TYPE, FISH_NAME의 컬림이 존재하고 각각 물고기의 종류(숫자), 물고기의 이름(문자)를 나타냅니다.
FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 문제입니다.
출력될 때 물고기의 이름 컬럼은 FISH_NAME, 잡은 수 컬럼은 FISH_COUNT로 해야 하고 결과는 잡은 수 기준 내림차순 정렬하여 출력되어야 합니다.
프로그래머스 코드
우선 조회해야 하는 컬럼은 FISH_NAME과 잡은 물고기 수 즉, COUNT 함수를 이용하여 카운트 된 값이기 때문에
SELECT문에 FISH_INFO의 FISH_TYPE의 수를 COUNT 함수로 추출합니다. 여기서 결과는 FISH_COUNT로 나타내야 하기 때문에 AS를 사용하여 출력 컬럼명을 수정해주고
FROM으로 FISH_INFO 테이블을 불러옵니다.
여기서 FISH_NAME_INFO 테이블도 필요하기 때문에 JOIN문으로 해당 테이블을 가져오고
ON 뒤에 FISH_INFO와 FISH_NAME_INFO 테이블의 공통 컬럼인 FISH_TYPE이 일치하는지 확인하도록 합니다.
이제 GROUP BY를 이용하여 각 컬럼의 기준이 되는 값들을 찾기 위해 FISH_NAME 컬럼을 사용하고
ORDER BY를 통해 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;