根据权重随机读取数据

大概介绍下思路,细节根据需求具体情况酌情修改。

需求,根据数据的权重值来随机读取数据,权重值越大,被读到的几率越大。

根据这个需求,基本思路就是将生成的随机数按照权重值得多少来划分数据范围,每个值所占全部数据范围的比重和权重值匹配。

例如,有5个权重值:1,2,3,4,5那么将整个数据范围分为5个区域,每个数据所占的范围分别是10%,20%,30%,40%和50%

简单的模型为:

case when @num between 0 and 9 then 1 --0
		when @num between 10 and 29 then 2   --1
		when @num between 30 and 59 then 3   --3
		when @num between 60 and 99 then 4   --6
		when @num between 100 and 149 then 5 --10
       END

所设置的数据范围值为1+2+3+4...的级数求和,也就是n*(n-1)/2,反向计算所得数值对应的权重值,即使求解一元二次方程式:n(n-1)/2=a

n=(1+SQRT(1+8a))

测试:

SELECT sv.number,CONVERT(INT,(1+SQRT(1+8*sv.number))/2) AS weighting FROM MASTER..spt_values AS sv WHERE sv.type='p'



结果

number	weighting
0	1
1	2
2	2
3	3
4	3
5	3
6	4
7	4
8	4
9	4
10	5
11	5
12	5
13	5
14	5
15	6
16	6
17	6
18	6
19	6
20	6
21	7
22	7
23	7
24	7
25	7
26	7
27	7
28	8
29	8
30	8
31	8
32	8
33	8
34	8
35	8
36	9
37	9
38	9
39	9
40	9
41	9
42	9
43	9
44	9
45	10
46	10
47	10
48	10
49	10
50	10
51	10
52	10
53	10
54	10
55	11
56	11
57	11
58	11
59	11
60	11
61	11
62	11
63	11
64	11
65	11
66	12
67	12
68	12
69	12
70	12
71	12
72	12
73	12
74	12
75	12
76	12
77	12
78	13
79	13
80	13
81	13
82	13
83	13
84	13
85	13
86	13
87	13
88	13
89	13
90	13
91	14
92	14
93	14
94	14
95	14
96	14
97	14
98	14
99	14
100	14
101	14
102	14
103	14
104	14
105	15
106	15
107	15
108	15
109	15
110	15
111	15
112	15
113	15
114	15
115	15
116	15
117	15
118	15
119	15
120	16
121	16
122	16
123	16
124	16
125	16
126	16
127	16
128	16
129	16
130	16
131	16
132	16
133	16
134	16
135	16
136	17
137	17
138	17
139	17
140	17
141	17
142	17
143	17
144	17
145	17
146	17
147	17
148	17
149	17
150	17
151	17
152	17
153	18
154	18
155	18
156	18
157	18
158	18
159	18
160	18
161	18
162	18
163	18
164	18
165	18
166	18
167	18
168	18
169	18
170	18
171	19
172	19
173	19
174	19
175	19
176	19
177	19
178	19
179	19
180	19
181	19
182	19
183	19
184	19
185	19
186	19
187	19
188	19
189	19
190	20
191	20
192	20
193	20
194	20
195	20
196	20
197	20
198	20
199	20
200	20
201	20
202	20
203	20
204	20
205	20
206	20
207	20
208	20
209	20
可以看出weighting越大它多覆盖number值得范围就越大(number就是生成的随机数)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值