2011-08-16 6 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

퀴즈 세션이란 무엇입니까? – Neil

+0

quizSession은 mysql 테이블의 한 열의 이름이고 score와 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

관련 문제