1

我有包含列的表

问题

现在我的要求是随机抽取 30 个问题,总分应该是 120。

我知道如何获取 30 个随机问题,即使用以下查询:

select * from questions order by random limit 30

我也知道如何找到标记列的总和,即使用以下查询:

从问题中选择总和(分数)

但是我被困在如何检查我带来的 30 个随机问题是那些总分数为 120 的问题。

4

2 回答 2

0

我想解决这个问题的一种方法(在得到正确的总数之前不进行递归或循环)是,如果你知道标记的分布,你可以为每个标记的设定数量拉出随机列表。

例如。(标记*n) + (标记*n) + (标记*n) = 120 也就是 (4*20)+(5*8) = 120 标记

在 SQL 中:

select * from
(
    select * from questions where marks = 4 order by random limit 20
        union all
    select * from questions where marks = 5 order by random limit 8
) a

我想您甚至可以推导出一个数学公式来随机化价差,从而为您提供真正的随机选择。

希望这可以帮助。

保罗·P

于 2013-05-23T10:25:48.567 回答
0

您的问题是背包问题(所有物体的重量和价值都相等)。

在 SQL 中解决它实际上是不可能的;您应该只阅读所有问号并在代码中实现解决方案。

于 2013-05-23T10:41:53.203 回答