sql查询数据权重问题,请高手进来(高分求助)

davs 2009-10-27 09:06:41
我用的是sql2000数据库
plist数据库内有几个字段
id 索引 int(4)
price 价格 float(8)
name 名称 vchar(1024)
我想实现这样的功能,随机取出20条数据,价格比较高的数据被查询出来的概率比较高! 价格比较高的数据在里面的权重比较高。查询出来的概率高。
请高手写出sql语句。或者存储过程。都可以。我想在数据库内实现。要是能程序完成也可以
plist 数据量是百万级的

高分求助,在线等 (本人对sql比较剥落)谢谢各位大侠了
...全文
428 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
taoistong 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL code不过随机取20条数据还是可以selecttop20*from tborderby pricenewid()
[/Quote]
只支持这种做法
acen_chen 2009-10-28
  • 打赏
  • 举报
回复
select top N .... from table where price > 10000
union
select top M .... from table where price <= 10000 and price>500
.........
mn自己根据权重设置
davs 2009-10-28
  • 打赏
  • 举报
回复
也就是权重问题。有好的算法不 ?
dawugui 2009-10-27
  • 打赏
  • 举报
回复
看不懂,帮顶.
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
----楼主:这样试试
declare @num int
select @num=convert(int,rand()*1000)
print (case when @num<20 then 20 else @num end)
select top 20 id, price, name from (
select top(case when @num<20 then 20 else @num end) id, price, name from plist order by newid()) t order by price desc;
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
select top 20 id, price, name from 
( select top 1000 id, price, name from plist order by newid() ) t order by t.price desc
navy887 2009-10-27
  • 打赏
  • 举报
回复
一个简单的算法,根据随机数取个随机比例
--百分比
declare @percent varchar(20)
--价格
declare @price int

if @price > 2000 --价格大于2000的时候取个百分比 80%左右
select @percent = convert(varchar,80.0- ascii(right(newid(),1))%6*0.1-ascii(right(newid(),1))%10*0.01)

else --其他价格的时候取多少百分比 20%左右
select @percent = convert(varchar,20.0- ascii(right(newid(),1))%3-ascii(right(newid(),1))%6*0.1-ascii(right(newid(),1))%10*0.01)

。。。。。。。。。。
davs 2009-10-27
  • 打赏
  • 举报
回复
请说个程序的算法也可以!谢谢
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
---多次top出来,看是不是你想要的数据,当然:其速度肯定会很慢了!
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
select top 20 from 
( select top 1000 id, price, name from plist order by newid() ) t order by t.price;
xiequan2 2009-10-27
  • 打赏
  • 举报
回复
sql貌似很不好搞
bancxc 2009-10-27
  • 打赏
  • 举报
回复
不会写 帮顶 这个在程序里好实现 sql不是干这个的
davs 2009-10-27
  • 打赏
  • 举报
回复
请各位大哥大姐写个给我。我急
--小F-- 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 davery 的回复:]
引用 2 楼 fredrickhu 的回复:
SQL code不过随机取20条数据还是可以selecttop20*from tborderby  pricenewid()

这个没有权重的。我的意思是价格高查出的概率就高。您这样价格高和价格低都一样,就没有权重一说了
[/Quote]

是的 所以你这个还是在程序中去做吧 SQL估计难搞 因为涉及到概率
luoyoumou 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiequan2 的回复:]
try:SQL codeselecttop20*from tborderbynewid(), pricedesc
[/Quote]
---没什么用的!
xiequan2 2009-10-27
  • 打赏
  • 举报
回复
try:
select top 20 * from tb order by   newid(), price  desc
davs 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL code不过随机取20条数据还是可以selecttop20*from tborderby pricenewid()
[/Quote]
这个没有权重的。我的意思是价格高查出的概率就高。您这样价格高和价格低都一样,就没有权重一说了
navy887 2009-10-27
  • 打赏
  • 举报
回复
select top 20 * from plist order by price desc

?
--小F-- 2009-10-27
  • 打赏
  • 举报
回复
不过随机取20条数据还是可以

select top 20 * from tb order by price newid()
--小F-- 2009-10-27
  • 打赏
  • 举报
回复
这个仿佛不是SQL解决的 对于求概率来说

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧