[프로그래머스] Lv.2 물고기 종류 별 잡은 수 구하기 (JOIN + GROUP BY)

[프로그래머스] Lv.2 물고기 종류 별 잡은 수 구하기 (JOIN + GROUP BY)
muaga's avatar
Apr 04, 2024
[프로그래머스] Lv.2 물고기 종류 별 잡은 수 구하기 (JOIN + GROUP BY)
Contents
풀이
 
notion image
notion image
notion image
notion image
 


SELECT COUNT(N.FISH_TYPE) AS FISH_COUNT, N.FISH_NAME FROM FISH_INFO AS F INNER JOIN FISH_NAME_INFO AS N ON F.FISH_TYPE = N.FISH_TYPE GROUP BY N.FISH_TYPE, N.FISH_NAME ORDER BY FISH_COUNT DESC -- 또는 SELECT COUNT(N.FISH_TYPE) AS FISH_COUNT, MIN(N.FISH_NAME) AS FISH_NAME FROM FISH_INFO AS F INNER JOIN FISH_NAME_INFO AS N ON F.FISH_TYPE = N.FISH_TYPE GROUP BY N.FISH_TYPE ORDER BY FISH_COUNT DESC
 

풀이


◽ JOIN 과 GROUP BY

GROUP BY는 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐주며, 주로 집계 함수와 같이 사용된다.
 
  1. JOIN으로 원하는 데이터를 1차로 SELECT 한다.
SELECT N.FISH_TYPE, N.FISH_NAME FROM FISH_INFO AS F INNER JOIN FISH_NAME_INFO AS N ON F.FISH_TYPE = N.FISH_TYPE
notion image
 
  1. 물고기 종류 별 수를 구하기 위해 겹치는 데이터를 GROUP BY로 합쳐 COUNT 함수를 통해 FISH_COUNT 데이터를 출력한다.
SELECT COUNT(N.FISH_TYPE) AS FISH_COUNT, MIN(N.FISH_NAME) AS FISH_NAME GROUP BY N.FISH_TYPE // FISH_NAME을 보면 FISH_TYPE에 맞는 동일한 데이터가 존재한다. 그래서 SELECT절에서 COUNT(FISH_TYPE)만을 한다면, 아래와 같은 오류가 날 것이기 때문에 MIN함수를 통해 FISH_NAME의 제일 처음 데이터(1개)를 출력하도록 한다.
 
SELECT COUNT(N.FISH_TYPE) AS FISH_COUNT, N.FISH_NAME GROUP BY N.FISH_TYPE, N.FISH_NAME // FISH_TYPE, FISH_NAME 둘 다 GROUP BY를 한다면, 이미 동일한 데이터를 합쳤기 때문에 SELECT절에서 MIN함수를 사용하지 않아도 FISH_NAME(1개)를 출력할 수 있다.
 

🚫 오류

"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" ➡️ SQL.MODE가 ONLY_FULL_GROUP_BY로 설정되어 있어, GROUP BY에 지정된 열 이외의 열을 포함하려면 반드시 집계 함수를 사용해야 할 때 뜨는 오류이다.
 
Share article

muaga's Hub