강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

[MSSQL] 임의의 행 무작위 추출
작성자 : 13 김영철
등록날짜 : 2009.01.23 00:35
2,804

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

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 되도록 하면 쉽게 해결이 됩니다.

 

[출처] 웹디황용

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2445 SQL : TRIGGER : TRIGGER 13 김영철 01.23 1879
2444 SQL : Ex : 기본 게시판(BASIC)용 테이블 설계 13 김영철 01.23 2688
2443 반복문만들기 13 김영철 01.23 2070
2442 데이터베이스 만들기 13 김영철 01.23 2969
2441 SQL : Stored Procedure : 저장 프로시저 13 김영철 01.23 1994
2440 SQL : INDEX : 클러스터 인덱스와 넌클러스터 인덱스만들기 13 김영철 01.23 2988
2439 SQL : GROUP BY & HAVING : GROUP BY와 HAVING를 사용한 검색 13 김영철 01.23 1851
2438 SQL : 집계함수 : 집계함수. 13 김영철 01.23 2923
2437 SQL : JOIN : 조인(Join). 13 김영철 01.23 2941
2436 SQL : Categories : 뷰(View). 13 김영철 01.23 2271
2435 SQL : T-SQL문 : T-SQL(Transact-SQL)문법 13 김영철 01.23 2756
2434 SQL : INSERT : 데이터베이스 생성과 테이블 생성 13 김영철 01.23 1766
2433 TFS Setup 13 김영철 01.23 2969
2432 CONSTRAINT [제약조건] 13 김영철 01.23 1819
2431 cascasde(연속동작) 13 김영철 01.23 2997
2430 SQL 2000 파일줄이기등등 13 김영철 01.23 2769
2429 25가지 SQL작성법 13 김영철 01.23 1414
2428 오라클(Oracle) 날짜 관련 함수 정리 13 김영철 01.23 4063
2427 MySQL 최적화 및 튜닝 13 김영철 01.23 2192
2426 sysobjects 테이블 스키마 13 김영철 01.23 2917
2425 sysobjects 13 김영철 01.23 2879
2424 MSSQL에 있는 테이블명과 용량을 볼수있는 sql 13 김영철 01.23 3078
2423 SQL에서 COUNT와 COUNT_BIG 의 차이점은 무엇인가요 13 김영철 01.23 2260
2422 [mssql]성능 측정을 위한 설정 13 김영철 01.23 2956
열람중 [MSSQL] 임의의 행 무작위 추출 13 김영철 01.23 2805
2420 [Database] SQL 기본 문법 간략하게 보기 13 김영철 01.23 1911
2419 Database에 관한 간략한 정의와 설명 13 김영철 01.23 1899
2418 SQL튜닝 점검사항 13 김영철 01.23 2692
2417 [MS SQL] 정규화에 대하여 알아볼까요...?^^ 13 김영철 01.23 2827
2416 First Guide to MySQL 13 김영철 01.23 3136
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취