sql语句!
表AA
id user_id class_id shu
1 100 2 50
2 200 4 5
3 100 3 10
4 300 2 20
5 400 2 20
结果:
注:(class_id=2 中包涵了3个user_id)
要在class_id=2 中随机选择一条记录出来!就是选(3个user_id中的其中一个)
但是:选择随机的机率性一定要在shu上
如: shu=50就是说这条的记录重复了50次
id user_id class_id shu
1 100 2 50
1 100 2 50
1 100 2 50
1 100 2 50
……………………………………
那么语句就好写了
select top 1 * from AA where class_id=2 order by newid()
但是我的shu是次数 不是一条条的记录!
随机的机率性一定要公平合理!按我上面的怎么写啊!
高手指点!
------解决方案--------------------declare @t table(id int,[user_id] int,class_id int,shu int)
insert @t select 1, 100, 2, 50
union all select 2, 200, 4, 5
union all select 3, 100, 3, 10
union all select 4, 300, 2, 20
union all select 5, 400, 2, 20
union all select 6, 100, 5, 20
select class_id,rand(checksum(newid())) as randnum into #t from @t group by class_id
select id,[user_id],t.class_id,shu from
(select *,(select isnull(sum(shu),0) from @t where class_id=a.class_id) as total,
(select isnull(sum(shu),0) from @t where id <a.id and class_id=a.class_id) as pre from @t a) t
inner join #t on t.class_ID=#t.class_id where randnum*total> =pre and randnum*total <pre+shu
drop table #t
---结果不定
------解决方案--------------------楼上厉害,学习