名前の付いたテーブルと名前の付い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
この質問はあなたを助けるかもしれないと思います-非常によく似た問題のようです。
それでもうまくいかない場合は、問題を2つに分けてみます。最初に、質問を組み合わせて作成します。次に、ポイントの合計でそれらをフィルタリングします。
しかし、テーブルのすべての組み合わせを作成する方法を見つけることができませんでした。それがどれほど難しいかわかりません。
select VH_QUESTION, sum(INT_MARK) from tbl_Question
group by VH_QUESTION
having sum(INT_MARK) >= 50
order by rand() limit 20
素早い回答
SELECT * ,SUM(INT_MARK) as total_mark FROM tbl_Question
GROUP BY VH_QUESTION
HAVING total_mark="50"
ORDER BY RAND()
LIMIT 5
答えがない場合は0行を返しますが、質問が見つかるたびにランダムです。
ベンチマークをチェックして、大きなテーブルのクエリを高速化できるかどうかを確認できます。