본문 바로가기
DB/SQL

[SQL Server] SELECT TOP

by 꼬바리 2021. 3. 16.

1. SELECT ... TOP(N)

 

상위 N개의 결과만 보고 싶을 때 SELECT ... TOP(N) 구문을 사용한다.

 

-- 가장 키가 큰 3명만 출력해 보자
-- TOP 3으로 해도 되지만, 가급적 TOP(3)으로 사용하자
SELECT TOP(3) Name, BirthYear, Height FROM UserTable
ORDER BY Height DESC

TOP(N)은 이전 버전의 SQL Server와의 호환성을 위해 TOP N 형식으로 사용해도 되나, 되도록 TOP(N) 형식을 권장한다.

 

TOP(N) 구문은 원하는 상위 N개의 결과를 보는 것도 중요하지만,

SQLServer의 부하를 많이 줄이는 방법이라는 점에서 의미가 있다.

 

SQLServer 2005 부터는 TOP(N) 구문이 변수, 수식  하위쿼리에도 사용할 수 있도록 향상되었다.

아래 예제는 하위쿼리를 이용한 방법이다.

 

-- COUNT(*)은 전체 행의 개수를 반환하므로, COUNT(*)/10은 전체 중 10%를 의미한다.
SELECT TOP(SELECT COUNT(*)/10 FROM UserTable) Name, BirthYear, Height FROM UserTable
ORDER BY Height DESC

위와 같이 전체 10% 등의 비율로 TOP 구문을 사용할 때 아래와 같이 TOP(N) PERCENT를 사용할 수도 있다.

 

-- TOP(N) PERCENT -> 상위 N 퍼센트
SELECT TOP(10) PERCENT Name, BirthYear, Height FROM UserTable
ORDER BY Height DESC

특정 조건을 기준으로 상위 N 퍼센트를 구하다 보면, 조건이 같은 개체가 여럿 있을 수 있다.

예를 들어, 상위 5%에게만 장학금을 주려 하는데, 동점자가 있는 경우가 이 경우라 할 수 있다.

 

이런 경우 TOP(N) PERCENT WITH TIES 구문을 사용하면 된다.

 

-- 100명 중 가장 키가 큰 3%만 출력을 하고 싶은데...
-- 1등 198, 2등 192, 3등 190이 5명이라고 하면...
-- 아래 결과는 (198), (192), (190, 190, 190, 190, 190)을 보여줄 것이다.
SELECT TOP(3) PERCENT WITH TIES Name, BirthYear, Height FROM UserTable
ORDER BY Height DESC

 

 

 

출처 : egloos.zum.com/sweeper/v/3000591

728x90
반응형

댓글