프로그래머스/My SQL

물고기 종류 별 잡은 수 구하기

싱싱한복초이 2024. 11. 14. 20:40

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

 

프로그래머스

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

programmers.co.kr

[문제]

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

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

 

[나의 풀이]

SELECT COUNT(*) FISH_COUNT, FISH_NAME
FROM FISH_INFO I JOIN FISH_NAME_INFO N
ON I.FISH_TYPE = N.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY 1 DESC;

 

(틀린 풀이)

SELECT COUNT(*) FISH_COUNT, FISH_NAME
FROM FISH_INFO I JOIN FISH_NAME_INFO N
ON I.FISH_TYPE = N.FISH_TYPE
GROUP BY I.FISH_TYPE
ORDER BY 1 DESC;

처음에 이렇게 풀었는데

 

실패 (1055, "Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'programmers.N.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절에서 지정되지 않은 열이 SELECT절에 있을때, 비집계열이 포함되지 않도록 한다

 

 

[다른 풀이]

SELECT COUNT(*) AS FISH_COUNT, N.FISH_NAME
FROM FISH_INFO I 
JOIN FISH_NAME_INFO N ON I.FISH_TYPE = N.FISH_TYPE
GROUP BY I.FISH_TYPE, N.FISH_NAME
ORDER BY FISH_COUNT DESC;

이렇게 할 경우 느려진다고 한다.

 

-참고

https://passionfruit200.tistory.com/1089

 

[SQL][프로그래머스] 물고기 종류 별 잡은 수 구하기 - INNER JOIN + GROUP BY MYSQL

https://school.programmers.co.kr/learn/courses/30/lessons/293257 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

passionfruit200.tistory.com

"항상 기억해야할점은, GROUP BY 절을 사용한다면 SELECT절에는 집계함수나, GROUP BY 절에 포함된 필드 및 컬럼만 출력할 수 있습니다."