임의의 행 무작위 추출 > db

본문 바로가기
사이트 내 전체검색

db

임의의 행 무작위 추출

페이지 정보

작성자 서방님 댓글 0건 조회 222회 작성일 06-12-13 21:06

본문

가끔은 한 테이블에서 검색을 할 때 무작위로 뽑아내고 싶은 경우가 있습니다. 예를 들어 추첨을 하는 경우 필요할 수 있는 요구사항입니다. 이에 대한 아주 간단한 방법을 소개해 드립니다.

1. newid() 함수

NEWID() 함수는 수행이 될 때마다 전혀 중복되지 않는 임의의 값을 만들어 리턴해줍니다. 만일 다음과 같이 newid() 함수의 결과를 SELECT 해보면

 

SELECT newid()

결과는 다음과 같습니다.

 

E78CAC2D-85DD-415B-9EEF-2FCBB93A05D3

한번 더 수행해 보면 결과는 다음과 같습니다.

 

C71014B6-F286-4E4C-B438-05CE509B9BDE

2. newid() 함수를 이용한 무작위 추출

위 내용을 이용하면 무작위로 테이블에서 행을 얻어 낼 수 있습니다. 만일 다음과 같이 Titles 테이블에서 5개의 title_id를 얻는 쿼리문이 있다고 가정하겠습니다.

 

USE Pubs
GO

SELECT TOP 5 title_id FROM titles

위 SELECT 문이 수행이 되면 매번 동일한 결과를 얻게 됩니다. Titles 테이블의 값이 변경되지 않는한 똑같은 결과가 나올 수 밖에 없습니다.

하지만 다음과 같이 ORDER BY 문을 사용하게 되면 결과는 매번 달라집니다.


USE Pubs
GO

SELECT TOP 5 title_id FROM titles
ORDER BY newid()

위와 같이 하면 쿼리가 수행되는 중에 newid() 함수에 의해 각 행에 임의의 값이 만들어지고 그 값을 기준으로 정렬해서 상위 5개의 행만을 얻게 되므로 결과가 매번 달라지게 됩니다. 우선 처음 수행을 시켜보면 결과는 다음과 같습니다.


title_id
--------
MC2222
BU7832
BU1032
PC8888
MC3026

(5개 행 적용됨)

한번 더 수행해보면 결과는 다음과 같습니다.


title_id
--------
BU7832
BU2075
MC3026
PS3333
TC3218

(5개 행 적용됨)

결과가 계속 달라짐을 알 수 있습니다. 확인해 보세요~

3. 정리

참 편리하죠? 만일 위 기능을 추첨에 사용한다고 한다면 한번 추첨된 값은 대상에서 제외하는 처리 루틴을 포함해야 합니다. SELECT 된 결과는 다른 테이블에 기록을 하고 그 테이블에 존재하는 대상을 제외하고 SELECT 되도록 하면 쉽게 해결이 됩니다.

댓글목록

등록된 댓글이 없습니다.

Total 464건 25 페이지
게시물 검색

회원로그인

접속자집계

오늘
545
어제
506
최대
1,347
전체
173,076
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.