티스토리 뷰
MSSQL에서 데이터 순서 지정하는 방법에 대해 알아보겠습니다. 특정 데이터 항목에 순서대로 번호를 매길 수 있는 함수 중에 자주 사용하는 함수는 ROW_NUMBER() 입니다. 이 함수를 사용하면 원하는 컬럼값을 오름차순이나 내림차순으로 정렬해 순서를 매길 수 있습니다.
우선 ROW_NUMBER() 함수의 기본 구문에 대해서 알아보겠습니다.
ROW_NUMBER() OVER ( [PARTITION BY column1, column2, ...]
ORDER BY column1, column2, ...)
- PARTITION BY 절 (선택 사항): 이 절은 행 번호를 생성할 때 그룹을 지정하는 데 사용됩니다. 즉, 특정 열 또는 열의 조합에 따라 결과를 그룹화하고 각 그룹 내에서 행 번호가 재설정됩니다. 예를 들어, PARTITION BY column1, column2로 지정하면 column1과 column2의 값을 기준으로 그룹을 형성하고, 각 그룹 내에서 행 번호가 재설정됩니다.
- ORDER BY 절: 이 절은 행 번호를 할당할 때 사용할 정렬 기준을 지정합니다. 결과 집합의 행을 정렬하기 위해 하나 이상의 열을 지정할 수 있습니다. ORDER BY 절에 지정된 열의 순서에 따라 행 번호가 할당됩니다.
이것만으로는 이해하기 쉽지 않기 때문에 예제를 통해 자세히 알아보겠습니다.
SELECT CategoryID, ProductID, ProductName,
ROW_NUMBER() OVER (PARTITION BY CategoryID ORDER BY ProductID) AS RowNum
FROM Products
이 쿼리는 Products 테이블에서 CategoryID를 기준으로 그룹화하고 각 그룹 내에서 ProductID를 기준으로 행 번호를 할당합니다. 다음의 각 CategoryID 그룹 내에서 ProductID에 따라 행 번호가 할당되는 가상의 실행 결과입니다.
CategoryID ProductID ProductName RowNum
----------- ---------- ------------ -------
1 100 Product A 1
1 200 Product B 2
1 300 Product C 3
2 150 Product X 1
2 250 Product Y 2
2 350 Product Z 3
위의 결과에서 CategoryID 1, 2로 먼저 구분되고 각 그룹 내에서 ProductID 정렬 순서에 따라 RowNum가 할당된 모습을 보실 수 있습니다. ProductName 컬럼은 정렬순서와는 관계없지만 SELECT 절에 선언됐기 때문에 같이 출력됩니다.
위 예제에서 PARTITION BY 절을 생략하면 결과값은 다음과 같이 변경됩니다.,
CategoryID ProductID ProductName RowNum
----------- ---------- ------------ -------
1 100 Product A 1
2 150 Product X 2
1 200 Product B 3
2 250 Product Y 4
1 300 Product C 5
2 350 Product Z 6
CategoryID를 기준은 그룹핑하는 모습은 사라지고 ProductID를 기준으로만 RowNum가 할당되는 모습을 볼 수 있습니다,
이 기능을 잘 응용하면 상위 N개의 행에 해당하는 값만 가져오거나 각 그룹별로 특정 조건에 따른 첫번째 행에 해당하는 값들도 가져올 수 있습니다. 예를 들어 주문 데이터 중에서는 가장 최근에 주문한 10개의 데이터만 가져올 수 있습니다. 여러분 모두 응용력을 발휘해서 다양한 현장 속 쿼리 작성 시 도움이 되시길 바라겠습니다.
'MS-SQL Server > Query' 카테고리의 다른 글
MSSQL 랜덤으로 데이터 정렬하는 법 (NEWID()) (0) | 2023.06.28 |
---|---|
MSSQL DB 복원 진행 확인 쿼리 (0) | 2023.06.19 |
MSSQL SET NOCOUNT ON/OFF 에 대해 알아보자 (0) | 2023.06.10 |
MSSQL OFFSET-FETCH 구문을 이용한 페이징 쿼리 (3) | 2023.06.10 |
MSSQL CHARINDEX 함수로 특정 문자 유무 확인하는 법 (0) | 2023.06.08 |
MSSQL 프로시저, 함수 변경이력 확인 쿼리 (0) | 2022.06.15 |
MSSQL 테이블 용량, 건수 확인 쿼리 (0) | 2022.05.26 |
- Total
- Today
- Yesterday
- javascript
- 고성
- ASP
- 템즈강
- 비스페놀A
- USB
- mssql
- 영국
- Roma
- URL
- DATEDIFF
- 런던
- jquery
- 이순신
- 환경호르몬
- 인코딩
- 한글깨짐
- MS-SQL
- 로마
- 체크박스
- 자바스크립트
- 태풍
- favicon
- iframe
- 근위병교대식
- ASP.NET
- toFixed
- 플라스틱
- html
- london
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |