MS-SQL 에서 특정 행 수를 제한하여 출력을 할 때, 사용하기에 적합한 함수를 살펴보려고 한다. Oracle 에서는 ROWNUM 이라는 것을 사용하는데 MS-SQL 은 ROWNUM이라는 게 없다. 이에 TOP 이나 ROW_NUMBER 를 이용하여 출력하려는 자료의 갯수를 제한하거나 순번을 메겨서 표기할 수 있다.
TEST Table & Data Create
CREATE TABLE #tmp_data
(
cust_id int,
cust_name varchar(10),
kr_lang int,
math int
)
INSERT INTO #tmp_data VALUES (1,'홍길동',85,90)
INSERT INTO #tmp_data VALUES (2,'이순신',100,95)
INSERT INTO #tmp_data VALUES (3,'카네기',25,80)
INSERT INTO #tmp_data VALUES (4,'임꺽정',55,40)
INSERT INTO #tmp_data VALUES (5,'김진구',85,85)
INSERT INTO #tmp_data VALUES (6,'한나나',90,75)
INSERT INTO #tmp_data VALUES (7,'강구구',60,100)
TOP
- 오라클의 ROWNUM 과 비슷하게 사용할 수 있다. TOP 으로 지정한 카운트만큼의 자료를 조회할 수 있다.
SELECT TOP 5 *
FROM #tmp_data
ORDER BY kr_lang DESC
ORDER BY 를 이용하여 kr_lang 의 높은 점수 기준으로 정렬한 후 TOP 5 로 상위 5개의 로우만 출력하도록 위와 같이 조회할 수 있다.
TOP WITH TIES
- TOP WITH TIES 를 이용하면 마지막 순위의 자료가 중복될 경우, 모두 조회한다.
SELECT TOP (3) WITH TIES kr_lang AS kr_lang_tie,
*
FROM #tmp_data
ORDER BY kr_lang DESC
ORDER BY 를 이용하여 kr_lang 의 높은 점수 기준으로 정렬하여 TOP3 를 추출하는데 kr_lang 이 동일한 자료가 있을 때, 위와 같이 TOP (3) WITH TIES kr_lang 을 이용하면 TOP 3 로 인한 3개의 행만 출력되는 게 아닌 kr_lang 의 마지막 3번째 숫자가 동일한 모든 자료도 조회가 처리된다. 이에 85점 중 그 다음이 기준이 없음으로 김진구, 홍길동이 모두 표기되는 것이다.
ROW_NUBMER
- 조회 순번을 설정.
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rownum,
*
FROM #tmp_data
ORDER BY kr_lang DESC
자료에 조회 순번을 메겨서 특정 자료만큼씩 끊어서 표기해야하는 경우들이 있다. 이 때에 row_number 를 이용하여 자료들의 순번을 메겨서 조회하는 데 이용하는 것이다.
ROW_NUMBER 외에도 응용하여 자료에 순번을 메기는 건 이전에 작성한 아래의 내용도 추가적으로 참고가 될 것 같다.
2024.03.12 - [데이터베이스[DB]/MSSQL] - [MSSQL] RANK, DENSE_RANK, ROW_NUMBER, PARTITION BY 차이
'데이터베이스[DB] > MSSQL' 카테고리의 다른 글
[MS-SQL] DATEPART, DATENAME - 일자(요일,주차,분기) 함수 (0) | 2025.03.21 |
---|---|
[MS-SQL] UNION, UNION ALL (0) | 2025.03.18 |
[MS-SQL] COMMIT, ROLLBACK, BEGIN TRAN (0) | 2025.02.11 |
[MS-SQL] 테이블별 용량확인 (0) | 2025.01.18 |
[MS-SQL] IIF, CASE ( DECODE, CASE ) 조건문 (0) | 2025.01.15 |
[MS-SQL] 테이블생성, 컬럼생성, 컬럼수정, 컬럼삭제, 테이블명변경 ( Create table, Alter table, Modify, Rename ) (0) | 2025.01.14 |
[MS-SQL] 인덱스 단편화 조회 및 리빌드 (0) | 2025.01.09 |
[MS-SQL] 테이블-컬럼 정보 조회 (0) | 2025.01.01 |