我有一个包含城市和人口的 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;
我有一个城市 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;