SQL OVER

OVER 절은 SQL의 윈도우 함수와 함께 사용되며, 해당 함수가 적용될 데이터 집합의 범위(윈도우)를 지정하는 데 필요합니다. ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG() 등의 윈도우 함수에서 OVER 절은 필수적입니다. 윈도우 함수를 사용하면, 각 행에 대해 계산을 수행할 때 지정된 범위의 다른 행들을 참조할 수 있습니다.

OVER 절 없이 윈도우 함수를 사용하려고 하면, SQL 쿼리는 오류를 발생시킵니다. OVER 절은 윈도우 함수가 어떤 방식으로 데이터를 분할(partitioning), 정렬(ordering), 또는 범위를 제한(frame specification)할지 정의합니다.

예를 들어, ROW_NUMBER() OVER (ORDER BY age DESC)에서 OVER 절은 ROW_NUMBER() 함수가 age 컬럼의 값에 따라 내림차순으로 데이터를 정렬하고, 이 순서에 따라 각 행에 고유한 순서 번호를 부여하도록 지시합니다.

따라서, 윈도우 함수를 사용하기 위해서는 OVER 절이 반드시 필요하며, 이를 생략할 수 없습니다. OVER 절을 생략하면, 함수가 적용될 데이터 집합의 범위가 명확하지 않게 되어, SQL 엔진이 해당 함수를 올바르게 처리할 수 없습니다.


OVER 절을 사용하는 SQL 윈도우 함수의 예제를 몇 가지 제공하겠습니다. 이 예제들은 데이터 분석과 보고서 작성에 자주 사용되며, 데이터베이스 내에서 데이터의 순위를 매기거나, 집계를 수행할 때 유용합니다.

예제 1: ROW_NUMBER() 사용하기

사용자 테이블에서 나이에 따른 사용자의 순위를 매깁니다. 나이가 높은 사용자부터 낮은 순서로 순위를 매깁니다.

SELECT
  username,
  age,
  ROW_NUMBER() OVER (ORDER BY age DESC) AS row_number
FROM users;

이 쿼리는 users 테이블의 모든 사용자에 대해 나이를 기준으로 내림차순 순위를 매기고, 각 사용자에 대해 고유한 순서 번호(row_number)를 부여합니다.

예제 2: RANK() 사용하기

판매 데이터가 있는 테이블에서 각 판매원의 판매액에 따른 순위를 매깁니다. 같은 판매액을 가진 판매원은 같은 순위를 받습니다.

SELECT
  salesperson_id,
  sales_amount,
  RANK() OVER (ORDER BY sales_amount DESC) AS rank
FROM sales;

이 쿼리는 sales 테이블에서 sales_amount를 기준으로 각 판매원의 판매액 순위를 매기며, 같은 판매액을 가진 경우 같은 순위를 부여합니다.

예제 3: SUM() 사용하기

각 사용자의 총 구매액을 연도별로 집계합니다.

SELECT
  user_id,
  YEAR(purchase_date) AS year,
  SUM(amount) OVER (PARTITION BY user_id, YEAR(purchase_date)) AS total_spent
FROM purchases;

이 쿼리는 purchases 테이블에서 각 사용자(user_id)의 연도별 총 구매액(total_spent)을 계산합니다. PARTITION BY 절을 사용하여 각 사용자와 연도별로 데이터를 분할하고, 그 안에서 SUM(amount)를 계산하여 총 구매액을 구합니다.

OVER 절은 이와 같이 다양한 윈도우 함수와 함께 사용되어, 데이터에 대한 복잡한 질의와 분석을 가능하게 합니다.




게시됨

카테고리

작성자

태그:

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다