Home 비슷하면서 다른 SQL 정리
Post
Cancel

비슷하면서 다른 SQL 정리

GROUP BY와 PARTITION BY

GROUP BY와 PARTITION BY는 SQL에서 데이터를 그룹화하는 데 사용되는 중요한 구문이다.
두 구문은 유사한 기능을 하지만, 결과 데이터의 구조와 사용 목적에 차이가 있다.

주요 차이점

특성GROUP BYPARTITION BY
결과 행의 수그룹화된 결과만 반환하여 감소모든 원본 행 유지
데이터 집계 방식그룹별로 집계하여 하나의 결과 행 생성각 행에 그룹의 집계 결과 추가
사용 위치SELECT 문의 마지막 부분윈도우 함수와 함께 OVER 절 내에서 사용

GROUP BY

1
2
3
4
5
6
7
8
9
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;

| department | avg_salary |
|------------|------------|
| IT         | 75000      |
| Sales      | 65000      |
| HR         | 55000      |

이 쿼리는 부서별 평균 급여를 계산하며, 결과는 부서 수만큼의 행을 반환한다.
주로 총매출 계산이나 제품 카테고별 평균 가격 산출에 용이하다.

PARTITION BY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
    employee_name,
    department,
    salary,
    AVG(salary) OVER (PARTITION BY department) as dept_avg_salary
FROM employees;

| employee_name | department | salary | dept_avg_salary |
|---------------|------------|--------|-----------------|
| 도비           | IT         | 80000  | 75000           |
| 헤르미온느       | IT         | 70000  | 75000           |
| 해리포터        | Sales      | 60000  | 65000           |
| 존시나          | Sales      | 70000  | 65000           |
| 다비드          | HR         | 55000  | 55000           |

이 쿼리는 모든 직원의 정보를 유지하면서 각 부서의 평균 급여를 함께 표시한다.
각각의 지원급여와 해당 부서평균 급여나 월별 매출과 연각 누적 매출을 동시에 보고 싶을떄 사용

결론

GROUP BY는 데이터를 요약하고 집계할 때 유용하며, PARTITION BY는 원본 데이터를 유지하면서 그룹별 계산 결과를 함께 보여주고자 할 때 효과적이다. 분석 목적과 필요한 결과 형태에 따라 적절한 구문을 선택하여 사용하면 된다.

< 정리중 >

UNION vs. UNION ALL

특성UNIONUNION ALL
중복 제거중복 행 제거중복 행 유지
성능중복 검사로 인해 상대적으로 느림중복 검사 없어 빠름
결과 정렬자동으로 결과 정렬정렬하지 않음

JOIN vs. SUBQUERY

특성JOINSUBQUERY
데이터 결합 방식테이블 간 직접 결합쿼리 내 다른 쿼리 포함
성능대체로 빠름복잡한 경우 느릴 수 있음
가독성복잡한 조인에서 가독성 떨어질 수 있음간단한 경우 가독성 좋음
유연성다중 테이블 조인 가능단일 값 또는 행 집합 반환

WHERE vs. HAVING

특성WHEREHAVING
필터링 시점그룹화 전 행 필터링그룹화 후 결과 필터링
집계 함수 사용사용 불가사용 가능
성능일반적으로 더 빠름WHERE로 먼저 필터링한 후 사용 시 효율적
사용 위치GROUP BY 이전GROUP BY 이후

INNER JOIN vs. OUTER JOIN

특성INNER JOINOUTER JOIN
결과 행양쪽 테이블에서 일치하는 행만한쪽 또는 양쪽 테이블의 모든 행 포함 가능
NULL 처리NULL 값 제외NULL 값 포함 가능
사용 사례두 테이블 간 공통 데이터 필요 시한 테이블의 모든 데이터와 매칭 정보 필요 시
This post is licensed under CC BY 4.0 by the author.