1. 문제목적
GROUP BY와 COUNT 함수를 활용하여 데이터를 그룹화하고 특정 컬럼 값을 기준으로 집계된 데이터를 정렬하여 추출하는 SQL 문법을 학습하기 위한 것입니다.
2. 핵심개념
GROUP BY
- 정의: 데이터를 지정한 컬럼 기준으로 그룹화하여 집계 작업을 수행할 수 있게 한다.
SELECT 컬럼1, 집계함수(컬럼2)
FROM 테이블
GROUP BY 컬럼1;
COUNT 함수
- 정의: 특정 컬럼에서 행의 개수를 세는 집계 함수.
SELECT COUNT(컬럼)
FROM 테이블;
- 특징: NULL 값을 제외하고 행의 개수를 셀 수 있다.
JOIN
- 정의: 두 개 이상의 테이블을 연결하여 데이터를 조합하는 방법.
SELECT *
FROM 테이블1
JOIN 테이블2
ON 테이블1.공통컬럼 = 테이블2.공통컬럼;
ORDER BY
- 정의: 결과를 지정된 컬럼 기준으로 정렬한다.
SELECT *
FROM 테이블
ORDER BY 컬럼 [ASC|DESC];
- 기본 정렬은 ASC(오름차순)이며, DESC는 내림차순 정렬이다.
3. 문제해결 절차
- 데이터 분석:
- FISH_INFO 테이블은 물고기 종류(FISH_TYPE)와 개별 길이(LENGTH) 및 시간(TIME) 정보를 포함.
- FISH_NAME_INFO 테이블은 물고기 종류(FISH_TYPE)와 이름(FISH_NAME)을 매핑.
- 요구사항 이해:
- 각 물고기 이름(FISH_NAME)별로 잡힌 횟수(FISH_COUNT)를 계산해야 함.
- 잡힌 횟수를 기준으로 내림차순 정렬.
- 문제 해결 계획:
- 두 테이블을 FISH_TYPE 기준으로 JOIN.
- FISH_NAME을 기준으로 그룹화하여 각 그룹의 행 개수(COUNT)를 계산.
- 결과를 내림차순으로 정렬.
- SQL문 작성:
- JOIN으로 두 테이블을 결합.
- GROUP BY와 COUNT를 사용해 물고기 이름별로 잡힌 횟수를 집계.
- ORDER BY로 결과 정렬.
4. 코드작성
-- 1. FISH_INFO와 FISH_NAME_INFO를 FISH_TYPE 기준으로 JOIN하여 데이터를 결합
SELECT
FNI.FISH_NAME, -- 물고기 이름
COUNT(FI.ID) AS FISH_COUNT -- 잡힌 횟수 계산
FROM
FISH_INFO FI -- 물고기 정보 테이블
JOIN
FISH_NAME_INFO FNI -- 물고기 이름 테이블
ON
FI.FISH_TYPE = FNI.FISH_TYPE -- FISH_TYPE을 기준으로 JOIN
WHERE
FI.LENGTH IS NOT NULL -- NULL 값을 제외 (길이가 없는 경우 제외)
GROUP BY
FNI.FISH_NAME -- 물고기 이름을 기준으로 그룹화
ORDER BY
FISH_COUNT DESC; -- 잡힌 횟수를 기준으로 내림차순 정렬
5. 코드분석
JOIN
- FISH_INFO와 FISH_NAME_INFO를 FISH_TYPE으로 연결하여 데이터를 하나의 테이블처럼 결합.
- JOIN 조건: FI.FISH_TYPE = FNI.FISH_TYPE.
COUNT
- COUNT(FI.ID)는 FI 테이블에서 각 물고기 종류별로 잡힌 횟수를 계산.
- FI.LENGTH IS NOT NULL 조건은 NULL 데이터를 제외하고 개수를 정확히 계산하도록 한다.
GROUP BY
- 물고기 이름(FNI.FISH_NAME)별로 데이터를 그룹화.
- 그룹화된 데이터에 대해 COUNT로 개수를 집계.
ORDER BY
- 집계된 결과를 내림차순으로 정렬하여 잡힌 횟수가 많은 순서대로 데이터를 출력.
'SQL Kit > GROUP BY' 카테고리의 다른 글
월별 잡은 물고기 수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
---|---|
노선별 평균 역 사이 거리 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
조건에 맞는 사원 정보 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
가격대 별 상품 개수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
입양 시각 구하기(1) [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |