簡體   English   中英

MySQL IN條件子查詢

[英]MySQL IN Condition Subquery

我有一個問題和答案列表,以及一個根據正確答案的百分比過濾問題的選項。 所以我在清單中使用以下查詢:

SELECT 
question_id, 
text
FROM 
test_answers LEFT JOIN test_questions ON test_questions.id = test_answers.question_id 
LEFT JOIN test_categories ON test_questions.`category_id` = test_categories.id 
WHERE `question_id` IN(question IDS) 
GROUP BY `question_id` 
ORDER BY `question_id` DESC;

並使用另一個查詢來查找問題IDS,其正確答案的百分比在給定范圍內。 查詢如下:

SELECT q1.question_id FROM (
        SELECT test_answers.question_id AS question_id, 
        SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) AS correct_answers, 
        SUM( IF( test_answers.correct_answer !=1, 1, 0 ) ) AS incorrect_answers, 
        round( ( SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) / ( SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) + SUM( IF( test_answers.correct_answer !=1, 1, 0 ) ) ) *100 ) , 2 ) AS percentage 
        FROM test_replies 
        JOIN test_answers ON test_replies.answer_id = test_answers.id 
        GROUP BY test_answers.question_id 
        HAVING percentage between 80 and 89 AND correct_answers >25
) AS q1

現在的問題是,第二個查詢將返回近4000個問題ID,並且在不久的將來會增加,並且可能會變成10k或更多。 因此,我非常想優化查詢,因為它將極大地影響性能。 有人可以建議一種更好的方法嗎?

嘗試加入而不是IN ,看看是否有幫助。 (未測試sql)

SELECT 
    ta.question_id, text
FROM 
    (
        SELECT test_answers.question_id AS question_id, 
        SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) AS correct_answers, 
        SUM( IF( test_answers.correct_answer !=1, 1, 0 ) ) AS incorrect_answers, 
        round( ( SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) / ( SUM( IF( test_answers.correct_answer =1, 1, 0 ) ) + SUM( IF( test_answers.correct_answer !=1, 1, 0 ) ) ) *100 ) , 2 ) AS percentage 
        FROM test_replies 
        JOIN test_answers ON test_replies.answer_id = test_answers.id 
        GROUP BY test_answers.question_id 
        HAVING percentage between 80 and 89 AND correct_answers >25
    ) AS q1
INNER JOIN 
    test_answers ta USING (question_id) 
LEFT JOIN 
    test_questions ON test_questions.id = ta.question_id 
LEFT JOIN 
    test_categories ON test_questions.`category_id` = test_categories.id 
GROUP BY 
    ta.question_id`
ORDER BY 
    ta.question_id DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM