
프로그래머스 MySQL: 특정 물고기를 잡은 총 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/298518
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
낚시앱 데이터베이스에서
특정 물고기(BASS, SNAPPER)를 몇 마리 잡았는지 구하는 SQL 문제다.
테이블은 두 개로 구성되어 있다.
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 |
FISH_NAME_INFO 👉 물고기 종류 번호와 실제 이름 매핑 정보
| FISH_TYPE | FISH_NAME |
| 0 | BASS |
| 1 | SNAPPER |
| 2 | ANCHOVY |
여기서 중요한 포인트는 물고기 종류가 숫자로 저장되어 있다는 것이다.
즉, 단순히 FISH_TYPE = 0처럼 작성하는 것이 아니라,
👉 이름 기준으로 안전하게 조회하는 방식을 고민해야 하는 문제였다.
처음에는 이렇게 접근했다.
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE FISH_TYPE = 0 OR FISH_TYPE = 1;
코드 실행은 정상적으로 통과
하지만 ❌ 테스트 케이스 실패
🤔 왜 실패했을까?
나는 FISH_TYPE = 0, FISH_TYPE = 1이 각각 BASS, SNAPPER라고 가정하고 작성했다.
하지만 코딩 테스트에서는 👉 ID 값은 언제든 바뀔 수 있다고 가정해야 한다.
즉,
지금은 0 = BASS일 수 있지만
테스트 환경에서는 3 = BASS일 수도 있음!!
이렇게 되면 하드코딩한 숫자 조건은 전부 무너진다.
💡 문제의 핵심
이 문제에는 FISH_INFO 테이블과 어종 이름이 들어있는 FISH_NAME_INFO 테이블이 따로 존재했다.
즉, 이름을 기준으로 판단해야 하는 구조였다.
실제 코딩 테스트나 실무에서는 “값”이 아니라 “의미”를 기준으로 작성하는 것이 안전하다!
✅ 수정한 쿼리
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO FI
JOIN FISH_NAME_INFO FNI
ON FI.FISH_TYPE = FNI.FISH_TYPE
WHERE FNI.FISH_NAME IN ('BASS', 'SNAPPER');
👉 이제 어떤 테스트 데이터가 들어와도 안전하다.
코딩 테스트에서 ID를 하드코딩하지 말고,
항상 “의미 있는 값(이름, 상태 등)”을 기준으로 작성하자.
'✨BACKEND > 📍Database' 카테고리의 다른 글
| MySQL 설치부터 비밀번호 초기화까지 (feat. DBeaver) (0) | 2026.02.20 |
|---|