我有一张关于城市和人口的表格.我想在人口中随机运行



>我有一个城市表,上面有:"名称"和"人口"。我想随机选择一个城市,但基于人口。

纽约 - 19.000.000城市 2 - 1.000.000

因此,随机地,我获得"纽约"的机会比"城市2"多19倍。

当然,这张表有更多的城市。

要随机选择按总体加权的记录,这将起作用:

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

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

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

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

数学上看起来,很棒。

但我在表格中插入了 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;

最新更新