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

yannie·2024년 9월 13일
0

[문제]

FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문을 작성해주세요.

물고기의 이름 컬럼명은 FISH_NAME, 잡은 수 컬럼명은 FISH_COUNT로 해주세요.
결과는 잡은 수 기준으로 내림차순 정렬해주세요.

[내가 푼 풀이(오답)]

SELECT
    A.FISH_NAME,
    COUNT(B.ID) AS FISH_COUNT
FROM FISH_NAME_INFO A
INNER JOIN FISH_INFO B
ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY B.FISH_TYPE
;

-> 오류 발생

" 실패 (1055, "Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'programmers.A.FISH_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by")"

오류가 발생한 원인은
GROUP BY는 B.FISH_TYPE을 기준으로 하고 있지만, SELECT절에는 A.FISH_NAME이 들어있다. A.FISH_NAME은 GROUP BY에 포함되지 않은 비집계된 열이기 때문에 에러가 발생하였다.

[내가 푼 풀이(정답)]

SELECT
    COUNT(B.ID) AS FISH_COUNT,
    A.FISH_NAME
FROM FISH_NAME_INFO A
INNER JOIN FISH_INFO B
ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY A.FISH_NAME
ORDER BY FISH_COUNT DESC
;

[코드리뷰]

  • 물고기 종류 별 물고기의 이름과 잡은 수
  • 물고기 종류 별 : GROUP BY
  • 물고기 이름 -> FISH_NAME
  • 잡은 수 - 잡은 물고기들의 정보는 FISH_INFO 테이블에 있으므로 JOIN필요, COUNT()함수 필요

기억해!

  • 반드시 SELECT절에 포함된 열로 GROUP BY를 해야한다.
  • 잘못 생각했던 부분
    • 물고기 종류별로 그룹화하여야 하기 때문에 GROUP BY에는 무조건 FISH_TYPE을 넣어야 한다고 생각했다.
    • 근데 왜 안되는거지...?????????
    • GROUP BY에 FISH_NAME이 아닌 FISH_TYPE이 들어가려면 어떻게 해야 하는 걸까?

0개의 댓글