본문 바로가기

SQL Kit/GROUP BY

조건에 맞는 사원 정보 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ]

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. 문제 해결 절차

  1. 데이터 분석:
    • HR_GRADE 테이블에서 사원별 점수를 합산해야 하며, 가장 높은 점수를 가진 사원을 조회해야 한다.
    • HR_EMPLOYEES와 JOIN하여 사원 번호를 기준으로 상세 정보를 결합한다.
  2. 평가 점수 합산:
    • HR_GRADE 테이블의 점수(SCORE)를 사원별로 합산하기 위해 SUM 함수를 사용하고 GROUP BY를 적용한다.
  3. 결합 및 필터링:
    • HR_EMPLOYEES 테이블과 JOIN하여 사원 번호(EMP_NO)를 기준으로 상세 정보를 결합한다.
    • ORDER BY를 사용하여 점수 기준으로 내림차순 정렬한다.
  4. 최고 점수 사원 조회:
    • LIMIT을 사용하여 점수가 가장 높은 1명의 데이터를 출력한다.
  5. 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개의 결과만 반환.