我有一张有城市和人口的桌子。我想在人口中随机运行

时间:2015-02-03 22:07:25

标签: mysql random

我有一张城市表:“名字”和“人口”。 我想随机选择一个城市,但总是以人口为基础。

纽约 - 19.000.000 城市2 - 1.000.000

如此随机我获得“纽约”的机会比“城市2”多19倍。

当然,这张桌子还有更多的城市。

2 个答案:

答案 0 :(得分:2)

要随机选择按人口加权的记录,这将有效:

SELECT * FROM tablename ORDER BY (RAND() * population);

添加LIMIT只允许一个,按人口随机挑选和加权:

SELECT * FROM tablename ORDER BY (RAND() * population) LIMIT 1;

答案 1 :(得分:0)

艾德金的回答对我没有用。我不知道为什么。

数学上看起来很棒。

但是我在表格中插入了300k个随机城市。大约90%的城市人口最多。 这个城市仅占全国总人口的5%。所以我得到了一个非常奇怪的结果。

也许mysql正在缓存RAND()或者什么......我不知道。

我自己做了这个sql,我的测试非常正确。

   SELECT @som := 0, @sorted := FLOOR( RAND()*(SELECT SUM(population) FROM cities ) );

   SELECT ord.id, ord.initial, ord.final FROM
        (
           SELECT 
               id, @som+1 AS initial, @som := @som + population  AS final 
           FROM cities
        ) ord
   HAVING @sorted
   BETWEEN 
       ord.initial AND ord.final;