1. 문제 목적
JOIN, GROUP BY, 집계 함수(SUM), ORDER BY, LIMIT를 활용하여 데이터를 결합하고 특정 조건에 맞는 데이터를 효율적으로 조회하는 방법을 학습하는 것이다.
2. 핵심 개념
JOIN
- 정의: 두 개 이상의 테이블을 결합하여 연관된 데이터를 조회.
- 종류:LEFT JOIN: 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 공통된 데이터 반환.
- INNER JOIN: 두 테이블의 공통된 데이터만 반환.
SELECT *
FROM 테이블1
INNER JOIN 테이블2
ON 테이블1.공통열 = 테이블2.공통열;
GROUP BY
- 정의: 데이터를 특정 열 값으로 그룹화하여 집계 함수와 함께 사용.
SELECT 열1, SUM(열2)
FROM 테이블명
GROUP BY 열1;
SUM 함수
- 정의: 주어진 열의 값을 모두 더하는 집계 함수.
SELECT SUM(열 이름)
FROM 테이블명;
ORDER BY와 LIMIT
- ORDER BY:기본적으로 오름차순 정렬하며, 내림차순은 DESC를 명시.
- 데이터를 특정 열을 기준으로 정렬.
ORDER BY 열 이름 DESC;
- LIMIT:
- 결과에서 반환할 행의 수를 제한.
LIMIT 1; -- 가장 상위 1개 행만 반환
3. 문제 해결 절차
- 데이터 분석:
- HR_GRADE 테이블에서 사원별 점수를 합산해야 하며, 가장 높은 점수를 가진 사원을 조회해야 한다.
- HR_EMPLOYEES와 JOIN하여 사원 번호를 기준으로 상세 정보를 결합한다.
- 평가 점수 합산:
- HR_GRADE 테이블의 점수(SCORE)를 사원별로 합산하기 위해 SUM 함수를 사용하고 GROUP BY를 적용한다.
- 결합 및 필터링:
- HR_EMPLOYEES 테이블과 JOIN하여 사원 번호(EMP_NO)를 기준으로 상세 정보를 결합한다.
- ORDER BY를 사용하여 점수 기준으로 내림차순 정렬한다.
- 최고 점수 사원 조회:
- LIMIT을 사용하여 점수가 가장 높은 1명의 데이터를 출력한다.
- SQL 작성 및 실행:
- 모든 조건을 결합한 SQL 쿼리를 작성하고 실행한다.
4. 코드 작성
-- 조건에 맞는 사원 정보 조회하기
SELECT
SUM(G.SCORE) AS SCORE, -- 사원별 점수를 합산하여 SCORE 열에 저장
G.EMP_NO, -- 사원 번호
E.EMP_NAME, -- 사원 이름
E.POSITION, -- 직책
E.EMAIL -- 이메일
FROM
HR_GRADE AS G -- 평가 점수 테이블
INNER JOIN
HR_EMPLOYEES AS E -- 사원 정보 테이블
ON
G.EMP_NO = E.EMP_NO -- 평가 점수와 사원 정보를 EMP_NO로 연결
GROUP BY
G.EMP_NO -- 사원 번호 기준으로 그룹화
ORDER BY
SCORE DESC -- 점수를 기준으로 내림차순 정렬
LIMIT 1; -- 가장 높은 점수의 1명만 출력
5. 코드 분석
SELECT 절
- SUM(G.SCORE) AS SCORE:
- HR_GRADE 테이블에서 사원별 점수를 합산하여 새로운 열 SCORE에 저장.
- G.EMP_NO, E.EMP_NAME, E.POSITION, E.EMAIL:
- 사원 번호, 이름, 직책, 이메일 데이터를 선택.
FROM 절과 JOIN
- HR_GRADE AS G:
- 평가 점수를 저장한 테이블.
- INNER JOIN HR_EMPLOYEES AS E:
- 사원 정보 테이블과 JOIN하여 평가 점수와 사원 정보를 연결.
ON 절
- G.EMP_NO = E.EMP_NO:
- 평가 점수와 사원 정보를 EMP_NO를 기준으로 연결.
5.4 GROUP BY 절
- G.EMP_NO:
- EMP_NO(사원 번호)를 기준으로 데이터를 그룹화하여 집계 함수(SUM)를 적용.
5.5 ORDER BY 절
- SCORE DESC:
- 점수(SCORE)를 기준으로 내림차순 정렬하여 가장 높은 점수를 가진 사원이 먼저 오도록 설정.
5.6 LIMIT 절
- LIMIT 1:
- 가장 상위 1개의 결과만 반환.
'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 |
입양 시각 구하기(1) [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
고양이와 개는 몇 마리 있을까 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |