프로그래머스 SQL 고득점 Kit
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit
FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문을 작성해주세요.
물고기의 이름 컬럼명은FISH_NAME
, 잡은 수 컬럼명은FISH_COUNT
로 해주세요.
결과는 잡은 수 기준으로 내림차순 정렬해주세요.
SELECT COUNT(*) AS FISH_COUNT,
B.FISH_NAME AS FISH_NAME
FROM FISH_INFO A
JOIN FISH_NAME_INFO B
ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY B.FISH_TYPE, B.FISH_NAME
ORDER BY FISH_COUNT DESC;
처음에 작성한 쿼리는 다음과 같다.
SELECT COUNT(A.FISH_TYPE) AS FISH_COUNT,
B.FISH_NAME AS FISH_NAME
FROM FISH_INFO AS A
JOIN FISH_NAME_INFO AS B
ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY A.FISH_TYPE
ORDER BY FISH_COUNT;
안됬던 이유는 뭘까...
실패 (1055, "Expression #3 of SELECT list is not in GROUP BY clause and contains
nonaggregated column 'programmers.B.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 A.FISH_TYPE
만 있어서 B.FISH_NAME
이 비집계 컬럼이 된다.
따라서 B.FISH_NAME
을 가져올 수 없는 것이다.
이 문제를 GROUP BY B.FISH_TPYE, B.FISH_NAME
으로 바꿔주며 해결하였다.
요즘 문제를 풀면서 느끼는 생각인데, 과연 실무에 들어갔을 때 내가 원하는 결과 값을 한번에 쿼리를 작성해서 도출할 수 있을까?? 라는 생각이 든다.
공부를 하면 할수록 부족함을 느끼고 그에 따라 불안감도 커져만 간다.
나를 믿고 하루하루 후회없이 살아보자 🔥