我想选择1到12之间的随机数,但是有权重,即4,5,6应该有50%的机会和1,2,3,7,8,9,10,11,12将有另外50%的机会。我使用下面的代码,但有没有更有效的方法来做到这一点,而不是重复两次相同的数字来实现加权?
select v_month from
(select 4 as v_month
union select 4
union select 5
union select 5
union select 6
union select 6
union select 1
union select 2
union select 3
union select 7
union select 8
union select 9
union select 10
union select 11
union select 12
) as tbl4
order by rand()
limit 1;
谢谢!
答案 0 :(得分:0)
如果您要使用查询
,我认为您可以这样做1-创建try table并放置值
CREATE TABLE try
(`id` int)
;
INSERT INTO try
(`id`)
VALUES
(1),
(2),
(3),
(4),
(4),
(5),
(5),
(6),
(6),
(7),
(8),
(9),
(10),
(11),
(12)
;
然后轻松运行此查询
select id from try
order by rand()
limit 1;
我测试了你的查询需要6毫秒,这个查询需要1毫秒