从表中随机选择一定百分比的条目

Posted

技术标签:

【中文标题】从表中随机选择一定百分比的条目【英文标题】:Random selection of a percent of entries from a table 【发布时间】:2013-08-23 14:19:33 【问题描述】:

我试图在一个垃圾箱中随机选择 30% 的票。下面的代码适用于 30%,但是当我在末尾添加“ORDER BY RND(INT(NOW*ID)-NOW*ID)”时,出现错误。

作品:

$result1 = "SELECT MainBin.Assignee, Count(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber FROM  MainBin GROUP BY MainBin.Assignee";
$rs1=odbc_exec($conn,$result1);
while($row = odbc_fetch_array($rs1))

$Assignee = "". $row['Assignee'];
$CountOfIncidentNumber = ceil($row["CountOfIncidentNumber"]);
$result2 = "INSERT INTO TicketBin (IncidentNumber)
SELECT TOP $CountOfIncidentNumber IncidentNumber FROM MainBin 
WHERE Assignee = '$Assignee'";
$rs2=odbc_exec($conn,$result2);

不工作:

 $result1 = "SELECT MainBin.Assignee, Count(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber FROM  MainBin GROUP BY MainBin.Assignee ORDER BY RND(INT(NOW*ID)-NOW*ID)";
 $rs1=odbc_exec($conn,$result1);

我有一个名为 ID 的自动编号字段,我以前用过这个,只是没有用于分组。任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

假设当您“遇到错误”时,您的意思是错误

您尝试执行的查询不包含指定表达式 'RND(INT(NOW()*ID)-NOW()*ID)' 作为聚合函数的一部分。

那么你可以尝试使用这样的方法

SELECT
        Assignee,
        CountOfIncidentNumber
FROM
        (
            SELECT 
                    MainBin.Assignee, 
                    COUNT(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber,
                    MIN(ID) AS MinOfID
            FROM MainBin 
            GROUP BY MainBin.Assignee
        )
ORDER BY RND(INT(NOW*MinOfID)-NOW*MinOfID)

编辑回复:评论

听起来您可能需要保留原始代码并改用它:

$result2 = "INSERT INTO TicketBin (IncidentNumber)
SELECT TOP $CountOfIncidentNumber IncidentNumber FROM MainBin 
WHERE Assignee = '$Assignee' ORDER BY RND(INT(NOW*ID)-NOW*ID)";

【讨论】:

这随机化了与以前相同的 30% 的顺序。这让我意识到我可能问错了问题。例如,受让人在 MainBin 中总共有 19 张票。我希望从 MainBin 中随机选择 30%(6 张票)并插入 TicketBin。

以上是关于从表中随机选择一定百分比的条目的主要内容,如果未能解决你的问题,请参考以下文章

从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

如何在一定百分比的时间内生成随机数

SQL 从表中选择条目,其中属性等于参数,否则选择 * 条目

如何编写 SQL 查询以从表中提取 50% 的记录?

oracle 按百分比提取数据

MS Access - 根据百分比随机选择记录