rhanziy

SQL - 쿼리 분석 본문

Java

SQL - 쿼리 분석

rhanziy 2023. 4. 18. 11:12

 

첫줄의 ROW_NUMBER()설명 보충

 

ROW_NUMBER() 은 윈도우 함수 중 하나로 결과 집합의 행 일련 번호를 매겨주는 함수이다.

일반적으로 PARTITION BY 구문과 함께 사용되며 특정 기준으로 나뉘어진 각 파티션의 행들은 ROW_NUMBER()에 의해 '1'부터 차례대로 넘버링 된다. 순위 동률을 메기는 RANK()와는 다르게 모든 행의 번호를 고유하게 순차적으로 지정하는 것이 특징이다. 구문은 다음과 같다.

ROW_NUMBER() OVER ([PARTITION BY value_expression, ... [n]] order_by_clause)

 

* OVER : 쿼리 결과 집합 내의 윈도우 또는 사용자 지정 행 집합을 정의한다. OVER 절에 윈도우 함수를 사용하여 이동 평균, 누적 집계, 누계 또는 그룹 결과당 상위 N개 결과 등의 집계된 값을 계산할 수 있다.

 

* PARTITION BY : 특정 열을 기준으로 데이터를 나눈다. PARTITION_BY를 지정하지 않으면 쿼리 결과 집합의 모든 행이 단일 그룹으로 취급된다.

 

// 1. PARTITION BY 없이 사용
SELECT
    ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#, name, recovery_model_desc
FROM sys.databases
WHERE database_id < 5;

// Row#, name, recovery_model_desc
// 1, master, SIMPLE
// 2, model, FULL
// 3, msdb, SIMPLE
// 4, tempdb, SIMPLE

// 2. PARTITION BY 사용, recovery_model_desc를 기준으로 파티션이 나뉜다.
SELECT
    ROW_NUMBER() OVER(PARTITION BY recovery_model_desc ORDER BY name ASC) AS Row#,
    name, recovery_model_desc
FROM sys.databases
WHERE database_id < 5;

// Row#, name, recovery_model_desc
// 1, model, FULL
// 1, master, SIMPLE
// 2, msdb, SIMPLE
// 3, tempdb, SIMPLE

 

 

👉 결과 : ROWNO 라는 컬럼명으로 결과값이 순차적으로 번호가 매겨져서 도출됨.

 

 

'Java' 카테고리의 다른 글

Spring - Spring Interceptor 실습  (0) 2023.04.21
Spring - Spring Interceptor 스프링 인터셉터  (0) 2023.04.21
SQL - OUTER JOIN 외부조인  (0) 2023.04.17
Java - 제네릭 클래스  (0) 2023.04.11
Java - 제네릭스  (1) 2023.04.11
Comments