我有一个名为的表tbl_Question
和一个名为的列INT_MARK
,它们对不同的问题有不同的标记。像这样:
VH_QUESTION INT_MARK
----------- --------
Q1 2
Q2 4
我的问题是:如何获得总分为 50 的随机 20 题?
select VH_QUESTION, sum(INT_MARK) from tbl_Question
group by VH_QUESTION
having sum(INT_MARK) > 50
order by rand() limit 1
快速回答
SELECT * ,SUM(INT_MARK) as total_mark FROM tbl_Question
GROUP BY VH_QUESTION
HAVING total_mark="50"
ORDER BY RAND()
LIMIT 5
当没有答案时它返回 0 行,但每次找到一个问题都是随机的。
您可以检查基准以查看是否可以更快地查询大型表。
我认为这个问题可能会对您有所帮助 - 似乎是一个非常相似的问题。
如果这不起作用,我会尝试将问题分为两部分:首先,您对您的问题进行组合。然后,您通过它的点总和过滤它们。
但是,我找不到如何生成表格的所有组合。我不知道那会有多难。
select VH_QUESTION, sum(INT_MARK) from tbl_Question
group by VH_QUESTION
having sum(INT_MARK) >= 50
order by rand() limit 20