2016-07-20 10 views
1

SQL의 하위 쿼리에 약간의 문제가 있습니다. 그녀의 쿼리mysql 하위 쿼리 쿼리 필드에서 선택하십시오.

SELECT st.title, count(q.id) as question_count, max(a.id) as maxid, 
      sum(case when a.answer is not null then 1 else 0 end) as answer_count, g.user_id as game_user_id, 
      a.game_id as a_game_id, a.modified as finished, (select modified as finished from answers a where a.id = g.maxid limit 1) as subquery 
     FROM games g 
     left join answers a on(a.game_id = g.id) 
     left join questions q on(a.question_id = q.id) 
     left join sessions s on(s.id = q.session_id) 
     left join sessiontypes st on(st.id = s.sessiontype_id) 
     WHERE g.user_id = 21 
     group by g.id 
     having(question_count = answer_count) 
     order by finished DESC; 

내가 서브 쿼리는 ID가 가장 높은 게임으로 그룹화입니다 답변에서 수정 된 값을 반환합니다.

그래서 나는 select max(id) as maxid...과 하위 쿼리의 최대 ID를 사용하려고했습니다. where a.id = maxid. 좋은 시도지만, 작동하지 않습니다. mysql 오류는 다음과 같습니다. Reference 'maxid' not supported (reference to group function)

아무도 그 문제를 해결할 수있는 힌트를 줄 수 있습니까?

답변

0

MAX(answers.id)answers.game_id으로 그룹화 한 부속 조회에 조 인하십시오.

그런 다음 maxid을 사용하여 answers 테이블에 조인하여 answers.id 행을 가져옵니다.

귀하의 결과가 귀하의 선택에 따라 달라질 수 있습니다. a.modified AS finished,을 삭제하고 maxid가있는 행의 modified 열로 대체했습니다.

SELECT 
    st.title, 
    count(q.id) AS question_count, 
    sum(
     CASE 
     WHEN a.answer IS NOT NULL THEN 
      1 
     ELSE 
      0 
     END 
    ) AS answer_count, 
    g.user_id AS game_user_id, 
    a.maxid, 
    a.game_id AS a_game_id, 
    modifiedAnswer.modified AS finished, 
FROM 
    games g 

LEFT JOIN (SELECT MAX(answers.id) AS maxid, game_id FROM answers GROUP BY answers.game_id) AS a ON (a.game_id = g.id) 
LEFT JOIN answers AS modifiedAnswer ON modifiedAnswer.id = a.maxid 

LEFT JOIN questions q ON (a.question_id = q.id) 
LEFT JOIN sessions s ON (s.id = q.session_id) 
LEFT JOIN sessiontypes st ON (st.id = s.sessiontype_id) 
WHERE 
    g.user_id = 21 
GROUP BY 
    g.id 
HAVING 
    (
     question_count = answer_count 
    ) 
ORDER BY 
    finished DESC; 
+0

흠, 내가 무슨 뜻인지 아는 것 같습니다. 그러나 귀하의 쿼리가 작동하지 않습니다. ;) –

+0

데이터를 줄 수 있습니까? 예상 결과 +이 쿼리에 대한 오류 메시지입니다. 하위 쿼리에서 별칭을 엉망으로 만들었지 만 id 다음에 game_id 뒤에 입력하십시오. 쿼리에서 수정 됨 – Philipp

+0

예, 문제가있었습니다. 고마워요. 아니, 내가 원하는 걸 얻는다. 이 SQL은 매우 혼란 스럽다. P –