복합 계산 만들기

SQL로 리포트 만들기

Tyler Pernes

Learning & Development Consultant

접근법

  1. 윈도 함수
  2. 다층 계산
SQL로 리포트 만들기

윈도 함수

  • 테이블의 다른 행을 참조합니다.
SQL로 리포트 만들기

윈도 함수

  • 테이블의 다른 행을 참조합니다.

SQL로 리포트 만들기

윈도 함수

  • 테이블의 다른 행을 참조합니다.

SQL로 리포트 만들기

윈도 함수 구문

SUM(value) OVER (PARTITION BY field ORDER BY field)

SQL로 리포트 만들기

윈도 함수 구문

SUM(value) OVER (PARTITION BY field ORDER BY field)

SQL로 리포트 만들기

윈도 함수 구문

SUM(value) OVER (PARTITION BY field ORDER BY field)

  • PARTITION BY = 계산 범위
  • ORDER BY = 계산 실행 시 행 순서
SQL로 리포트 만들기

윈도 함수 예시

전체 동메달 수

SELECT 
    country_id, 
    athlete_id, 
    SUM(bronze) OVER () AS total_bronze
FROM summer_games;
+-------------+-------------+---------------+
| country_id  | athlete_id  | total_bronze  |
|-------------|-------------|---------------|
| 11          | 77505       | 141           |
| 11          | 11673       | 141           |
| 14          | 85554       | 141           |
| 14          | 76433       | 141           |
+-------------+-------------+---------------+
SQL로 리포트 만들기

윈도 함수 예시

국가별 동메달 수

SELECT 
    country_id, 
    athlete_id, 
    SUM(bronze) OVER (PARTITION BY country_id) AS total_bronze
FROM summer_games
+-------------+-------------+---------------+
| country_id  | athlete_id  | total_bronze  |
|-------------|-------------|---------------|
| 11          | 77505       | 12            |
| 11          | 11673       | 12            |
| 14          | 85554       | 5             |
| 14          | 76433       | 5             |
+-------------+-------------+---------------+
SQL로 리포트 만들기

윈도 함수 유형

  • SUM()
  • AVG()
  • MIN()
  • MAX()
SQL로 리포트 만들기

윈도 함수 유형

  • LAG()LEAD()

SQL로 리포트 만들기

윈도 함수 유형

  • LAG()LEAD()

SQL로 리포트 만들기

윈도 함수 유형

  • ROW_NUMBER()RANK()

SQL로 리포트 만들기

집계 위에 윈도 함수 적용

original_table
+----------+-----------+---------+ 
| team_id  | player_id | points  |
|----------|-----------|---------|    
| 1        | 4123      | 3       |
| 1        | 5231      | 6       |
| 2        | 8271      | 5       |
+----------+-----------+---------+
desired_report
+----------+-------------+---------------+ 
| team_id  | team_points | league_points |
|----------|-------------|---------------|    
| 1        | 9           | 43            |
| 2        | 12          | 43            |
| 3        | 22          | 43            |
+----------+-------------+---------------+
SQL로 리포트 만들기

집계 위에 윈도 함수 적용

최종 쿼리

SELECT
    team_id,
    SUM(points) AS team_points,
    SUM(SUM(points)) OVER () AS league_points
FROM original_table
GROUP BY team_id;
SQL로 리포트 만들기

집계 위에 윈도 함수 적용

SELECT
    team_id,
    SUM(points) AS team_points,
    SUM(points) OVER () AS league_points
FROM original_table
GROUP BY team_id;
ERROR: points는 집계이거나 GROUP BY 절에 포함되어야 합니다.
SQL로 리포트 만들기

다층 계산

  • 기존 집계를 다시 집계
  • 서브쿼리 활용
SQL로 리포트 만들기

다층 계산 예시

1단계: 국가별 총 동메달

SELECT country_id, SUM(bronze) as bronze_medals
FROM summer_games
GROUP BY country_id;

2단계: 서브쿼리로 변환 후 최댓값 계산

SELECT MAX(bronze_medals)
FROM
  (SELECT country_id, SUM(bronze) as bronze_medals
  FROM summer_games
  GROUP BY country_id) AS subquery;
SQL로 리포트 만들기

복잡한 계산 설계하기

SQL로 리포트 만들기

복잡한 계산 설계하기

  • 윈도 함수의 정렬 필요?
  • 다층 계산으로 두 번 집계?
SQL로 리포트 만들기

연습해 봅시다!

SQL로 리포트 만들기

Preparing Video For Download...