https://school.programmers.co.kr/learn/courses/30/lessons/298518
코드설명
JOIN + IN 을 활용합니다.
여러가지 방법으로 풀 수 있습니다.
단순히 JOIN을 활용하거나, 네스티드 서브 쿼리를 활용할 수 있습니다.
COUNT 함수는 구하려는 행의 값이 1개인경우를 이용해 INNER JOIN을 한 데이터에 WHERE로 필터링시켜 COUNTING했습니다.
만약 각 물고기별 개수를 세고싶다면 아래와 같이 작성합니다.
처음에 INNER JOIN 한뒤 'BASS'와 'SNAPPER' 물고기의 개수를 가져왔습니다.
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO AS FI1
INNER JOIN FISH_NAME_INFO AS FNI1
ON FI1.FISH_TYPE = FNI1.FISH_TYPE
GROUP BY FNI1.FISH_TYPE
HAVING FNI1.FISH_TYPE IN ('0', '1');
이때 유의해야할점은, GROUP BY에 사용된 데이터와 HAVING 에 사용된 컬럼데이터가 일치해야 사용할 수 있다는 점입니다.
아래의 경우 HAVING절에 사용한 FNI1.FISH_NAME은 GROUP BY에 사용되지않았기에 작동하지 않습니다.
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO AS FI1
INNER JOIN FISH_NAME_INFO AS FNI1
ON FI1.FISH_TYPE = FNI1.FISH_TYPE
GROUP BY FNI1.FISH_TYPE
HAVING FNI1.FISH_NAME IN ('BASS', 'SNAPPER');
서브쿼리로도 풀 수 있습니다.
'BASS', 'SNAPPER'의 FISH_TYPE을 복수개의 데이터가 반환되고, IN 을 활용해서 그에 맞는 FISH_TYPE이 포함된 걸 찾은뒤 COUNT하면 됩니다.
하지만 일반적으로 INNER JOIN이 더 적합합니다.
코드
SELECT COUNT(*) AS FISH_COUNT FROM FISH_INFO
INNER JOIN FISH_NAME_INFO
ON FISH_NAME_INFO.FISH_TYPE = FISH_INFO.FISH_TYPE
WHERE FISH_NAME_INFO.FISH_NAME = 'BASS' OR FISH_NAME_INFO.FISH_NAME = 'SNAPPER';
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO AS FI1
INNER JOIN FISH_NAME_INFO AS FNI1
ON FI1.FISH_TYPE = FNI1.FISH_TYPE
WHERE FNI1.FISH_NAME IN ('BASS', 'SNAPPER')
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO AS FI
INNER JOIN FISH_NAME_INFO AS FNI
ON FI.FISH_TYPE = FNI.FISH_TYPE
WHERE FNI.FISH_NAME IN ('BASS', 'SNAPPER')
SELECT COUNT(*) AS FISH_COUNT FROM FISH_INFO
WHERE FISH_INFO.FISH_TYPE IN ( SELECT FISH_TYPE FROM FISH_NAME_INFO WHERE FISH_NAME_INFO.FISH_NAME IN ('BASS', 'SNAPPER'));
'SQL > 프로그래머스' 카테고리의 다른 글
[SQL][프로그래머스] 물고기 종류 별 잡은 수 구하기 - INNER JOIN + GROUP BY MYSQL (0) | 2024.03.26 |
---|---|
[SQL][프로그래머스] 월별 잡은 물고기 수 구하기 - GROUP BY + MONTH + DATE_FORMAT MYSQL (0) | 2024.03.26 |
[SQL][프로그래머스] 이름이 없는 동물의 아이디 - IS NULL MYSQL (0) | 2024.03.25 |
[SQL][프로그래머스] 이름이 있는 동물의 아이디 - IS NULL MYSQL (0) | 2024.03.25 |
[SQL][프로그래머스] 최댓값 구하기 - MAX MYSQL (0) | 2024.03.25 |