문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
Column name Type Nullable
ID INTEGER FALSE
FISH_TYPE INTEGER FALSE
LENGTH FLOAT TRUE
TIME DATE FALSE
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
FISH_NAME_INFO 테이블은 물고기의 이름에 대한 정보를 담고 있습니다. FISH_NAME_INFO 테이블의 구조는 다음과 같으며, FISH_TYPE, FISH_NAME 은 각각 물고기의 종류(숫자), 물고기의 이름(문자) 입니다.
Column name Type Nullable
FISH_TYPE INTEGER FALSE
FISH_NAME VARCHAR FALSE
문제
FISH_INFO 테이블에서 잡은 BASS와 SNAPPER의 수를 출력하는 SQL 문을 작성해주세요.
컬럼명은 'FISH_COUNT`로 해주세요.
예시
예를 들어 FISH_INFO 테이블이 다음과 같고
ID
| FISH_TYPE | LENGTH | TIME |
| -- | -- | -- | -- |
| 0 | 0 | 30 | 2021/12/04 |
| 1 | 0 | 50 | 2020/03/07 |
| 2 | 0 | 40 | 2020/03/07 |
| 3 | 1 | 20 | 2022/03/09 |
| 4 | 1 | NULL | 2022/04/08 |
| 5 | 2 | 13 | 2021/04/28 |
| 6 | 0 | 60 | 2021/07/27 |
| 7 | 0 | 55 | 2021/01/18 |
| 8 | 2 | 73 | 2020/01/28 |
| 9 | 2 | 73 | 2021/04/08 |
| 10 | 2 | 22 | 2020/06/28 |
| 11 | 2 | 17 | 2022/12/23 |
FISH_NAME_INFO 테이블이 다음과 같다면
FISH_TYPE FISH_NAME
0 BASS
1 SNAPPER
2 ANCHOVY
'BASS' 는 물고기 종류 0에 해당하고, 'SNAPPER' 는 물고기 종류 1에 해당하므로 잡은 'BASS' 와 'SNAPPER' 수는 7마리입니다.
FISH_COUNT
7
문제 풀이
SELECT SUM(FISH_COUNT) AS FISH_COUNT
FROM (
SELECT COUNT(fni.FISH_NAME) AS FISH_COUNT
FROM FISH_INFO fi
JOIN FISH_NAME_INFO fni ON fi.FISH_TYPE = fni.FISH_TYPE
WHERE fni.FISH_NAME = 'BASS' OR fni.FISH_NAME = 'SNAPPER'
GROUP BY fni.FISH_NAME
) AS subquery;
FISH_NAME이라는 칼럼은 FISH_NAME_INFO라는 테이블에 따로 관리되고 있었으므로 JOIN을 통해 'BASS'와 'SNAPPER'라는 이름을 가진 물고기를 WHERE문으로 가려냈다.
COUNT 함수와 GROUP BY를 통해 각 물고기의 숫자를 알아냈으나, 문제에서 원하는 것은 두 물고기의 합계였으므로 위 쿼리를 서브쿼리로 돌린 다음, SUM 함수를 통해 하나의 칼럼으로 만들었다.
'Minding's Programming > 프로그래머스 코딩테스트' 카테고리의 다른 글
[코딩테스트/Python] 프로그래머스 코딩테스트 - 문자열 압축 (0) | 2024.10.04 |
---|---|
[코딩테스트/Python] 프로그래머스 코딩테스트 - 주사위 게임 3 (0) | 2024.10.02 |
[코딩테스트/Python] 프로그래머스 코딩테스트 - 사탕 담기 (0) | 2024.09.30 |
[코딩테스트/Python] 프로그래머스 코딩테스트 - 운송 트럭 (1) | 2024.09.30 |
[코딩테스트/Python] 프로그래머스 코딩테스트 - 나머지 한 점 (1) | 2024.09.30 |