안녕하세요! 데코입니다!
오늘은 프로그래머스 코딩테스트 연습에 있는 "고양이와 개는 몇 마리 있을까" 문제를 포스팅하려고 합니다!
바로 포스팅 시작할게요! :)
(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59040)
1. 문제 : 고양이와 개는 몇 마리 있을까(Lv. 1)
2. 문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
[ 테이블 구조 ]
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요.
이때 고양이를 개보다 먼저 조회해주세요.
[ 예시 ]
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A373219 | Cat | 2014-07-29 11:43:00 | Normal | Ella | Spayed Female |
A377750 | Dog | 2017-10-25 17:17:00 | Normal | Lucy | Spayed Female |
A354540 | Cat | 2014-12-11 11:48:00 | Normal | Tux | Neutered Male |
고양이는 2마리, 개는 1마리 들어왔습니다.
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
[ 출력 결과 ]
ANIMAL_TYPE | count |
Cat | 2 |
Dog | 1 |
3. 문제 풀이
# 1안
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC
이번 문제는 1안과 한 가지로 작성했습니다!
# 1안 풀이 설명
## [ 문제 접근 설명 ]
문제의 요청사항을 보면 단순하게 테이블에서 Cat과 Dog인 동물의 수를 계산하는 문제입니다!
이후 Cat이 Dog보다 먼저 나오도록 조회하면 되네요!
따라서 동물의 타입을 나타내는 'ANIMAL_TYPE' 컬럼을 기준으로 GROUP BY 절을 통해 계산하면 됩니다!
이후 'ANIMAL_TYPE' 컬럼을 기준으로 ORDER BY 절을 통해 오름차순 정렬하여 조회해주면 됩니다!
## [ 1안 쿼리 작성 설명 ]
ANIMAL_INS의 테이블에 존재하는 컬럼들이 [출력 결과]에 나와 있는 컬럼들과 동일하게
" SELECT "를 통해 'ANIMAL_TYPE' 컬럼과 집계하는 함수 중 데이터의 개수를 세는 집계함수인 COUNT(*)를 입력 후
컬럼명을 'count'으로 나타나게 변경(Alias를 이용한 별칭 설정)
" GROUP BY ANIMAL_TYPE "을 통해 ANIMAL_TYPE에 있는 값별로 집계한다고 명시
" ORDER BY ANIMAL_TYPE ASC"를 통해 'ANIMAL_TYPE' 컬럼을 기준으로 오름차순 정렬
이렇게 쿼리를 작성했습니다!
4. 데코의 문제 풀이 후기
이번 문제는 GROUP BY 문을 이용하여 집계성 데이터를 추출하는 문제예요!
저번 포스팅 '최댓값 구하기'에서 언급했던 것과 같이(링크)
GROUP BY 절은 특정 칼럼을 기준으로 집계 함수를 사용하여 집계성 데이터를 추출할 때 사용해요!.
저번 포스팅과 연결되어서 동일한 내용을 한번 더 적자면
SQL에서 MAX, MIN, SUM, COUNT, AVG 등 함수는 집계함수입니다!
- MAX : 컬럼의 최댓값을 산출
- MIN : 컬럼의 최소값을 산출
- SUM : 컬럼의 값을 합계를 산출
- COUNT : 컬럼의 갯수를 산출
- AVG : 컬럼의 평균값을 산출
이 집계함수들은 주로 GROUP BY 문과 같이 사용돼요!
GROUP BY를 통해 묶은 그룹별로 집계함수를 적용하여 조회할 수 있습니다!
해당 문제에서는 ANIMAL_TYPE에 따라 동물의 수를 산출하는 것이기 때문에 COUNT(*) 했어요!
'COUNT(*)은 존재하는 모든 것의 수' 라고 이해하시면 됩니다!
이번 문제는 GROUP BY 문을 이용하여 집계성 데이터를 추출하는 문제를 풀어봤습니다!
설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해드릴게요!
공감과 댓글은 큰 힘이 됩니다!
읽어주셔서 감사해요!
또 다른 SQL 문제로 찾아뵐게요!
'Skill Sets > SQL' 카테고리의 다른 글
[SQL] 카테고리 별 상품 개수 구하기(프로그래머스/MySQL/Level 2) (25) | 2023.01.08 |
---|---|
[SQL] 중복 제거하기(프로그래머스/MySQL/Level 2) (16) | 2023.01.04 |
[SQL] 강원도에 위치한 생산공장 목록 출력하기(프로그래머스/MySQL/Level 1) (16) | 2023.01.01 |
[SQL] 최댓값 구하기(프로그래머스/MySQL/Level 1) (12) | 2022.12.31 |
[SQL] 상위 n개 레코드(프로그래머스/MySQL) (8) | 2022.12.28 |