【问题标题】:Taking n random elements from a table with a constraint从具有约束的表中获取 n 个随机元素
【发布时间】:2011-04-02 02:35:51
【问题描述】:

我正在尝试从具有 category_id = 0(其中 category_id = 0)约束的表中选择随机 n 个元素。之前,我使用概率流采样来做到这一点,因为它不会扫描每个元素。

但是,有没有办法通过额外的 where 约束来做到这一点?

拉出所有元素然后随机选择n个元素是没有意义的,因为表格有数百万行。

我之前没有额外约束的查询粘贴在下面。

       SELECT * 
         FROM (SELECT @cnt := COUNT(*) + 1, @lim := %s
                 FROM table) vars
STRAIGHT_JOIN (SELECT *, 
                      @lim := @lim-1
                 FROM table
                WHERE (@cnt := @cnt - 1) AND RAND() < @lim / @cnt) drv_tbl

【问题讨论】:

    标签: mysql sql random


    【解决方案1】:

    试试这个,

    select * from <table> where <constrain> order by RAND() limit 0,<n>
    

    【讨论】:

    • 这是一个相当低效的解决方案
    猜你喜欢
    • 2011-06-09
    • 2012-02-16
    • 2015-09-22
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2018-10-19
    • 2011-01-09
    • 2020-06-15
    相关资源
    最近更新 更多