_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈
FrontPage › 랜덤추출

Contents

[-]
1 테스트 데이터 만들기
2 NewID() 를 이용한 방법
3 TableSample을 이용한 방법
4 RAND()함수 이용하기


1 테스트 데이터 만들기 #

CREATE TABLE users
(
uid int,
uname varchar(30)
)
GO

--Inserting 15 rows into the table users
SET NOCOUNT ON
INSERT [users] ([uid],[uname])VALUES(1,'Vyas Kondreddi')
INSERT [users] ([uid],[uname])VALUES(2,'Narayana Kondreddi')
INSERT [users] ([uid],[uname])VALUES(3,'Kondreddi')
INSERT [users] ([uid],[uname])VALUES(4,'Narayana Vyas Kondreddi')
INSERT [users] ([uid],[uname])VALUES(5,'Subhadra Jyothsna')
INSERT [users] ([uid],[uname])VALUES(6,'Geetha Madhuri Vungarala')
INSERT [users] ([uid],[uname])VALUES(7,'Sridhar Vungarala')
INSERT [users] ([uid],[uname])VALUES(8,'Vamsee Mohan')
INSERT [users] ([uid],[uname])VALUES(9,'Gopala Krishna Kondreddi')
INSERT [users] ([uid],[uname])VALUES(10,'Nagaja Devi Kondreddi')
INSERT [users] ([uid],[uname])VALUES(11,'Vijaya Madhuri Govindaraju')
INSERT [users] ([uid],[uname])VALUES(12,'Pamarthy Pradeep Kumar')
INSERT [users] ([uid],[uname])VALUES(13,'Pamarthy Harinath')
INSERT [users] ([uid],[uname])VALUES(14,'Vungarala Sathyanarayana')
INSERT [users] ([uid],[uname])VALUES(15,'Pamarthy Ramakrishna')
SET NOCOUNT OFF
GO

2 NewID() 를 이용한 방법 #

SELECT TOP 1
	uid
,	uname
FROM users
ORDER BY NewID()

데이터양이 많으면 성능 저하됨.

3 TableSample을 이용한 방법 #

WHILE(1=1)
BEGIN
	SELECT TOP 1
		uid
	,	uname
	FROM users TABLESAMPLE(200 ROWS)
	
	IF @@ROWCOUNT > 0
		BREAK
END
데이터가 좀 많아야 제대로 써먹을 수 있다. 'TABLESAMPLE(n ROWS)'에서 n은 2 ~ 3 Page정도에 들어갈 row수면 될 것이다.

4 RAND()함수 이용하기 #

--일반적으로..
DECLARE @mx int, @mn int
SELECT @mx = MAX(uid), @mn = MIN(uid) FROM users
SELECT uid,uname [Lucky Winner is...] FROM users WHERE uid = ROUND(@mn + (RAND() * (@mx-@mn)),0)


--만약 중간에 이빨이 빠져서 1개의 Row도 반환하지 못하는 상황이면...

DECLARE @mx int, @mn int, @uid int, @uname varchar(200)
SELECT @mx = MAX(uid), @mn = MIN(uid) FROM users
WHILE(1=1)
BEGIN
	SELECT 
		@uid = uid
	,	@uname = uname 
	FROM users WHERE uid = ROUND(@mn + (RAND() * (@mx-@mn)),0)
	IF @@ROWCOUNT > 0 
		BREAK
END

SELECT @uid, @uname
아무래도 데이터가 얼마 정도 쌓이기 전까지는 이 방법을 이용하고, 데이터가 많이 쌓이면 Tablesample을 이용하는 것이 좋겠다.

댓글 남기기..
이름: : 오른쪽의 새로고침을 클릭해 주세요. 새로고침
EditText : Print : Mobile : FindPage : DeletePage : LikePages : Powered by MoniWiki : Last modified 2018-04-13 23:12:53

내가 존재하기에 내 안의 이세상은 존재한다.