2011-08-16 108 views
1

我想创建第三个选择,如果分数等于maxscore会说通过,否则会失败。这是查询评估...比较/评估mysql中的两个子查询

我该怎么做?我可以创建第三个子查询AS状态,还是需要在变量上创建?

SELECT DISTINCT 
    qui.title AS Course_Name, 
    (SELECT sum(score) 
    FROM jos_jquarks_quizzes_answersessions  
    WHERE score IS NOT NULL 
     AND quizsession_id = quizSession.id  
     AND status <> -1) AS score, 
    (SELECT count(distinct question_id) 
    FROM jos_jquarks_quizzes_answersessions    
    WHERE quizsession_id = quizSession.id) AS maxScore, 
    (SELECT count(distinct question_id) 
    FROM jos_jquarks_quizzes_answersessions    
    WHERE quizsession_id = quizSession.id) AS QuizStatus, 
    DATE_FORMAT(quizSession.finished_on,'%W, %M %e, %Y @ %h:%i %p') As Finished 
FROM 
    jos_jquarks_quizsession AS quizSession 
LEFT JOIN 
    jos_jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id  
LEFT JOIN 
    jos_jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id  
LEFT JOIN 
    jos_jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
LEFT JOIN 
    jos_jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id   
LEFT JOIN 
    jos_jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
LEFT JOIN 
    jos_jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id 
WHERE 
    sessionWho.user_id = '246' 
+0

什么是quizSession? – Neil

+0

quizSession是mysql表上一列的名称,计算得分和maxscore都是计算列 – Tony77

回答

1

如果您不需要返回分数或maxscore那么你可以简单地比较两个子查询表达式:

SELECT quizSession.id, IF(
    (SELECT sum(score) 
     FROM jos_jquarks_quizzes_answersessions  
     WHERE score IS NOT NULL AND quizsession_id = quizSession.id AND status <> -1) = 
    (SELECT count(distinct question_id) 
     FROM jos_jquarks_quizzes_answersessions 
     WHERE quizsession_id = quizSession.id), "Pass", "Fail") AS status 
    FROM quizSession 

如果你确实需要的所有列,你可能会更好关闭,写入子查询的联接:

SELECT quizSession.id, sum_subquery.score_sum AS score, max_subquery.max_score, 
     IF(sum_subquery.score_sum = max_subquery.max_score, "Pass", "Fail") AS status 
    FROM quizSession 
    INNER JOIN (
    SELECT quizsession_id, sum(score) AS score_sum 
     FROM jos_jquarks_quizzes_answersessions  
     WHERE score IS NOT NULL AND status <> -1 
     GROUP BY quizSession_id 
) AS sum_subquery ON quizSession.id = sum_subquery.quizsession_id 
    INNER JOIN (
    SELECT quizsession_id, count(distinct question_id) 
     FROM jos_jquarks_quizzes_answersessions 
     GROUP BY quizsession_id 
) AS max_subquery ON quizSession.id = max_subquery.quizsession_id 
+0

查询显示有语法错误,请查看更新代码 – Tony77

+0

我加了完整查询 – Tony77

+0

请您看看图 – Tony77

0
SELECT * from 

(SELECT sum(score) 
FROM jos_jquarks_quizzes_answersessions  

    WHERE score IS NOT NULL AND quizsession_id = quizSession.id  
    AND status <> -1 
UNION 
SELECT count(distinct question_id) FROM jos_jquarks_quizzes_answersessions    
WHERE quizsession_id = quizSession.id 
UNION 

SELECT count(distinct question_id) FROM jos_jquarks_quizzes_answersessions    
WHERE quizsession_id = quizSession.id) AS marksscormaxxmarkstrigger 

这行之有效

+0

嗨在哪里我想在原来的查询上添加查询顶部替换>? – Tony77

+0

我得到 - '子查询返回多于一行SQL1.sql 1 1' – Tony77