我有一个包含城市和人口的 table。我想 运行 基于人口的随机数

I have a table with city and population. I want to run a random based in population

我有一个城市 table:"name" 和 "population"。 我想select随机抽取一个城市,但以人口为准。

纽约 - 19.000.000 城市 2 - 1.000.000

随机得到 "New York" 的机会比 "City 2" 多 19 倍。

当然这个table还有更多的城市。

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

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

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

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

Ed King 的回答对我不起作用。不知道为什么。

数学上看起来很棒。

但我在 table 中插入了 30 万个随机城市。大约 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;