안녕하세요! 데코입니다!
오늘은 프로그래머스 코딩테스트 연습에 있는 "한 해에 잡은 물고기 수 구하기" 문제를 포스팅하려고 합니다!
바로 포스팅 시작할게요! :)
(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/298516)
1. 문제 : 한 해에 잡은 물고기 수 구하기(Lv. 1)
2. 문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다.
FISH_INFO 테이블의 구조는 다음과 같으며
ID, FISH_TYPE, LENGTH, TIME은 각각
잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
[ 테이블 구조('FISH_INFO') ]
COLUMN NAME | TYPE | NULLABLE |
ID | INTEGER | FALSE |
FISH_TYPE |
INTEGER | FALSE |
LENGTH | FLOAT | TRUE |
TIME | DATE | FALSE |
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL이며,
LENGTH에 NULL 만 있는 경우는 없습니다.
[ 문제 ]
FISH_INFO 테이블에서 2021년도에 잡은 물고기 수를 출력하는 SQL 문을 작성해주세요.
이때 컬럼명은 'FISH_COUNT' 로 지정해주세요.
[ 예시 ]
예를 들어 FISH_INFO 테이블이 다음과 같고
ID | FISH_TYPE | LENGTH | TIME |
0 | 0 | 13.37 | 2021/12/04 |
1 | 0 | 50 | 2020/03/07 |
2 | 0 | 40 | 2020/03/07 |
3 | 1 | 43.33 | 2022/03/09 |
4 | 1 | NULL | 2022/04/08 |
5 | 2 | NULL | 2021/04/28 |
2021 년도에 잡은 물고기는 물고기의 ID 0, 5에 해당하는 물고기 2마리입니다.
따라서 결과는 다음과 같아야 합니다.
[ 출력 결과 ]
FISH_COUNT |
2 |
3. 문제 풀이
-- 1안
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE SUBSTR(TIME,1,4) = '2021'
이번 문제는 총 1안 한 가지로 작성했습니다!
1. FISH_INFO 테이블에서 2021년도에 잡은 물고기 필터링(WHERE)
2. 물고기 수 산출(COUNT 함수 이용)
# 1안 풀이 설명
# [ 문제 접근 설명 ]
문제를 읽고 조건에 맞는 쿼리를 작성하기 위해서 다음과 같이 두 가지 단계로 진행했어요!
# [ 1안 쿼리 작성 설명 ]
1 첫 번째 단계에서는 FISH_INFO 테이블에서 2021년도에 잡은 인 데이터만 필터링하는 쿼리를 작성했습니다!
저는 SUBSTR() 함수를 이용해서 TIME 칼럼에서 앞의 4자리를 가져오고
이 4자리가 2021'인지를 WHERE 문에 넣어서 작성했습니다.
다른 방법으로는 TIME 컬럼이 DATE 타입이기 때문에 YEAR() 함수를 이용해서
YEAR(TIME)이 2021인지를 확인해도 동일한 결과가 나옵니다!
SELECT *
FROM FISH_INFO
WHERE 1=1
SUBSTR(TIME,1,4) = '2021'
2 두 번째 단계에서는 문제에서 명시한 것과 같이 필터링한 데이터를 통해 물고기 수를 산출해 주었습니다.
이후 컬럼명을 FIST_COUNT로 지정해 주었습니다.
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE 1=1
SUBSTR(TIME,1,4) = '2021'
물고기 ID가 PK이기 때문에 이번에는 COUNT(*)로 해도 정답이지만
조금 더 명확하게 해 주기 위해서는 컬럼을 * 대신 적어주어도 됩니다.
예를 들면 물고기 수가 아닌 물고기 종류의 수를 산출하라고 하는 경우에는
종류는 중복으로 데이터가 존재할 수 있으니까, FISH_TYPE을 넣어서 아래와 같이 산출해 주면 됩니다.
4. 데코의 문제 풀이 후기
이번 문제에는 특정 연도의 문제를 필터링하고 개수를 구하는 문제입니다!
문제에서 요구하는 것을 파악하고,
데이터가 어떻게 생겼는지를 알아야 단순히 COUNT(*)만 하면 되는지
아니면 특정 컬럼을 COUNT(컬럼) 하면 되는지 파악할 수 있습니다.
이 외에는 난이도에 맞게 이전 문제들에서 모두 다룬 것들을 이용해서
따로 코멘트할 것은 없네요!
혹시나 더 좋은 쿼리나 어렵게 느껴지신 부분이 있다면 댓글로 남겨주세요!
오늘 글에서 설명이 어려운 부분이나 잘 이해가 안 가는 부분
그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해 드릴게요!
공감과 댓글은 큰 힘이 됩니다!
오늘도 블로그 방문해 주시고
포스팅 읽어주셔서 감사합니다!
'Skill Sets > SQL' 카테고리의 다른 글
[SQL] 잡은 물고기 중 가장 큰 물고기의 길이 구하기(프로그래머스/MySQL/Level 1) (38) | 2024.06.29 |
---|---|
[SQL] 특정 물고기 잡은 수 구하기(프로그래머스/MySQL/Level 2) (36) | 2024.06.28 |
[SQL] 가장 큰 물고기 10마리 구하기(프로그래머스/MySQL/Level 1) (36) | 2024.06.22 |
[SQL] 물고기 종류별 대어 찾기(프로그래머스/MySQL/Level 3) (41) | 2024.06.09 |
[SQL] 월별 잡은 물고기 수 구하기(프로그래머스/MySQL/Level 2) (31) | 2024.06.03 |