从表中随机选择一定百分比的条目
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 子句时)