如何在MySQL中选择具有权重的随机数

时间:2014-02-16 22:11:46

标签: mysql random

我想选择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;

谢谢!

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毫秒