一个及其郁闷但又很有挑战的问题!

panku 2006-06-20 04:28:59
这是一个关于概率的问题,需求是这样的,有一张表时胡一个字段叫星级:“star_level”,就和宾馆的几颗星是一样道理,分为1,2,3,4,5,五个等级,现在做这样的一个查询,1星级的出现的概率为1/15,2星级的出现的概率为2/15,以此类推,例如:
表:tbl_A
  ID name star_level
---------------------------------------------------
1 AAA 5
2 BBB 3
3 CCC 5
4 DDD 1
要求在每做一次查询时,"AAA"记录出现的概率为5/15,"BBB"记录出现的概率为3/15,等等。
谁能写出这样的查询语句?或给出解决这个问题的思路也行。
...全文
501 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
filebat 2006-06-22
  • 打赏
  • 举报
回复
但是看样子, 不是这样.
可能是1星类的出现的概率为1/15, 2星类的出现的概率是2/15...
这样的话,你可以按我回的第一帖中的方法来做, 如果记录足够多的话.

"我也想过你这种做法,1星的生成一条重复记录,
2星的2条重复记录,可这样还是会出现重复记录。
无法保证取出2条记录是不重复的,并且只有2条记录"

你为什么要这样做呢?
你随机取1条1星记录, 随机取2条2星记录(不同的记录), 随机取3条3星...
类似insert #temp select top 2 * from tablename order by newid()不就行了吗?
filebat 2006-06-22
  • 打赏
  • 举报
回复
注意到1/15+2/15+3/15+4/15+5/15=1
也就是说表中一定只有五条记录.
是这样的不?

如果这样的话,那就比较简单了.
willial 2006-06-21
  • 打赏
  • 举报
回复
关注!
gohst001 2006-06-21
  • 打赏
  • 举报
回复
重复的问题还是靠多top几个然后去重复吧,
sql好像没办法保证你select出来的东西包含多少不重复的纪录
panku 2006-06-21
  • 打赏
  • 举报
回复
to LouisXIV(夜游神)

你还是没有考虑到这样会有重复数据的问题
panku 2006-06-21
  • 打赏
  • 举报
回复
to: filebat(Mark)

我也想过你这种做法,1星的生成一条重复记录,2星的2条重复记录,可这样还是会出现重复记录。无法保证取出2条记录是不重复的,并且只有2条记录
filebat 2006-06-21
  • 打赏
  • 举报
回复
不过问题是,五星级的可能没有五条这么多。
filebat 2006-06-21
  • 打赏
  • 举报
回复
我有一个想法。
就是用一个临时表。
然后,随机取1条星级的记录到临时表中,
再随机取2条星级的记录到临时表中,
再随机取3条星级的记录到临时表中,
再随机取4条星级的记录到临时表中,
再随机取5条星级的记录到临时表中,
然后,从这个表里去你要的数据

LouisXIV 2006-06-20
  • 打赏
  • 举报
回复
欠考虑,还是有BUG

-_-
LouisXIV 2006-06-20
  • 打赏
  • 举报
回复
要是这样的话,你不用管这个表,

你直接在一个写有15行(5星5行,4星4行,以此类推)的表--结构就是一个Star_level--

中用top x ...order by newid()取出你要的行数(并带出Star_level)

再按照出来的Star_level从原表中选一个Name就是了
gohst001 2006-06-20
  • 打赏
  • 举报
回复
问题在于是5星的出现概率是5/15?
应该是这个意思
panku 2006-06-20
  • 打赏
  • 举报
回复
是5星的出现概率是5/15
LouisXIV 2006-06-20
  • 打赏
  • 举报
回复
问题在于是5星的出现概率是5/15?

还是AAA的出现概率是5/15?

2个概念是不同的(在数据量稍多的场合时后面那个其实是无法达成的)
panku 2006-06-20
  • 打赏
  • 举报
回复
to gohst001(很多年来一直想知道昵称到底能多长)
 LiBin_OberthurCS(子陌红尘)
 
我也有过这样的想法,但没有办法解决重复数据的问题,像这样查出的结果可能是2条一样的记录,这是不允许的。
gohst001 2006-06-20
  • 打赏
  • 举报
回复
好像楼主的意思应该是星级占所有的1-5相加之后的比例,1+2+3+4+5=15

所以产生个临时表 1星占一行2星有2行(都是重复的数据)。。。5星就5行
然后order by newid()就好了
panku 2006-06-20
  • 打赏
  • 举报
回复
to LouisXIV(夜游神)

这只是一个概率问题,不一定要非常准确!
LouisXIV 2006-06-20
  • 打赏
  • 举报
回复
老大,这个解决不了问题,如果数据量变大,

总体数据基数会变很大,一个5星也就5行,

出现概率肯定达不到这样的标准,

我开始是考虑按最小公倍数进行数据扩增,就是没想到办法

此外选出多行还要考虑概率的相乘效果以及重复问题^^;
panku 2006-06-20
  • 打赏
  • 举报
回复

to LouisXIV(夜游神)

比如说:我每查询三次“AAA”记录就可能会出现一次,每查询五次,“BBB”记录才可能会出现一次,
LiBin_OberthurCS 2006-06-20
  • 打赏
  • 举报
回复
忘记distinct应该放在什么位置了,试试:

select
top 2 distinct *
from
(select * from tbl_A union all
select * from tbl_A where star_level>1 union all
select * from tbl_A where star_level>2 union all
select * from tbl_A where star_level>3 union all
select * from tbl_A where star_level>4) a
order by
newid()
LouisXIV 2006-06-20
  • 打赏
  • 举报
回复
取2条你的概率是相加还是相乘?
加载更多回复(3)
内容概要:本文提出一种基于鱼鹰优化算法(OOA)优化的CNN-BiGUR-Attention混合模型,用于提升短期风电功率预测的精度与稳定性,采用Matlab实现代码仿真。该模型融合卷积神经网络(CNN)提取输入数据的局部空间特征,利用双向门控循环单元(BiGUR)捕捉风速、功率等时间序列的前后向动态依赖关系,并引入注意力机制自适应强化关键时间步的特征权重,从而增强模型对非平稳风电数据的表征能力;进一步,采用OOA算法对模型超参数进行全局寻优,有效提升模型收敛速度与泛化性能。研究基于实际风电场历史数据开展实验验证,结果表明,该方法相较传统模型在预测精度、鲁棒性和误差抑制方面表现更优,适用于高比例可再生能源接入背景下的电力系统调度需求。; 适合人群:从事新能源发电预测、电力系统优化调度、智能算法与深度学习融合应用等方向的科研人员及工程技术人员,尤其适合具备Matlab编程能力、熟悉时间序列建模与深度学习框架的研究者。; 使用场景及目标:①实现风电场短期功率高精度预测,支撑电网安全稳定调度与能量管理;②为深度学习模型结构设计与智能优化算法联合调参提供实践范例;③推动人工智能技术在可再生能源预测、智能电网运行等领域的落地应用。; 阅读建议:建议结合提供的Matlab代码深入理解CNN-BiGUR-Attention网络架构搭建、注意力机制实现方式及OOA优化流程,重点关注数据预处理、模型训练与参数调优细节,可通过替换不同风电数据集进行对比实验,进一步掌握模型迁移能力与适应性。

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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