본문 바로가기

DBMS/SQL Server

[SQL Server] 유일한 값을 찾는 다양한 방법

 

가끔 여러 개의 값들 중 중복된 값을 제외한 유일한 값을 찾아야 할 때가 있다.

이 경우 DISTINCT 키워드를 주로 사용한다.

그러나 유일한 값을 찾는 방법은 많다.

 

 -- 테스트를 위해 테이블 생성

 CREATE TABLE #SALES_DETAILS (

    SALES_ID INT IDENTITY(1,1)

  , ITEM_ID INT NOT NULL

  , QTY INT NOT NULL

  , UNIT_PRICE DECIMAL(12,2) NOT NULL

  , SALES_DATE DATETIME NOT NULL

 )

 GO

 

 -- 데이터 삽입

 INSERT INTO #SALES_DETAILS (ITEM_ID,QTY,UNIT_PRICE,SALES_DATE)

 SELECT 1001,5,200,'2012-09-03 11:16:28'

 UNION ALL

 SELECT 1001,2,200,'2012-09-04 19:22:11'

 UNION ALL

 SELECT 1002,15,1300,'2012-09-06 14:26:40'

 UNION ALL

 SELECT 1003,8,78,'2012-09-19 15:11:19'

 UNION ALL

 SELECT 1001,6,200,'2012-09-22 16:36:11'

 UNION ALL

 SELECT 1004,22,1000,'2012-09-23 16:51:34'

 UNION ALL

 SELECT 1004,11,1000,'2012-09-23 17:29:38'

 UNION ALL

 SELECT 1002,29,1300,'2012-09-23 18:20:10'

 UNION ALL

 SELECT 1002,6,1300,'2012-09-26 19:40:41'

 UNION ALL

 SELECT 1002,33,1300,'2012-09-30 20:26:29'

 GO

 

 

유일한 값을 얻기 위해 여러가지 방법을 사용해보자.

 

 -- DISTINCT 키워드 사용

 SELECT DISTINCT ITEM_ID FROM #SALES_DETAILS

 GO

 

 -- GROUP BY 절 사용

 SELECT ITEM_ID FROM #SALES_DETAILS

 GROUP BY ITEM_ID

 GO

 

 -- 같은 테이블 UNION

 SELECT ITEM_ID FROM #SALES_DETAILS

 UNION

 SELECT ITEM_ID FROM #SALES_DETAILS

 GO

 

 -- ROWSELECT 하지 않는 테이블과 UNION

 SELECT ITEM_ID FROM #SALES_DETAILS

 UNION

 SELECT ITEM_ID FROM #SALES_DETAILS WHERE 1=0

 GO

 

 -- 공집합 테이블과 UNION

 SELECT ITEM_ID FROM #SALES_DETAILS

 UNION

 SELECT 0 WHERE 1=0

 GO

 

 -- ROW_NUMBER() 함수 사용

 SELECT ITEM_ID FROM

  ( SELECT ROW_NUMBER() OVER (PARTITION BY ITEM_ID

                              ORDER BY ITEM_ID) AS SNO, *

    FROM #SALES_DETAILS

  ) AS T

 WHERE SNO = 1

 GO

 

 

 모든 쿼리는 아래의 결과와 같음을 확인할 수 있다. 

 

 

참고 : http://beyondrelational.com/modules/2/blogs/70/posts/18189/different-ways-to-find-distinct-values.aspx