2012-04-30 5 views
3

확인을 HAVING에 여러 행, 그래서 내가하고 싶은 쿼리를 해결하기 :SQL - 절

나는 다음과 같은 비즈니스 규칙의 말씀을드립니다

:

디스플레이 특정 튜토리얼 그룹을 ((tutorialID) 및 주 (주))에 추가 검토가 필요합니다.

기본적으로 그룹의 구성원 수를 결정해야하므로 해당 주와 그 그룹의 모든 스크럼 검토를 집계하여이 금액이 그룹의 구성원 수와 동일한 지 확인해야합니다. 그렇다면 모든 회원이 그 주간에 검토되었으며 따라서 표시 할 필요가 없음을 의미합니다.

가정 : 회원은 일주일에 한 번만 리뷰 할 수 있습니다.

나는 다음과 같은 SQL을 시도했습니다

그러나 나는 다음과 같은 오류를 Subquery returns more than 1 row

SELECT groupName, g.groupId 
FROM `student` s, `group` g 
WHERE s.GroupId = g.GroupId 
AND s.GroupId IS NOT NULL 
AND s.tutorialId = 2 
GROUP by s.GroupId 
AND s.GroupID = (
    SELECT GroupId 
    FROM student 
    GROUP BY GroupId 
    HAVING count(*)> (
     SELECT count(*) 
     FROM scrumreview r, student s 
     WHERE r.reviewee = s.studentID 
     GROUP BY GroupId  
     AND r.week = 5 
     ) 
    ) 

학생 enter image description here

scrumreview enter asdasddescription here

그룹을 얻을 enter image description here

+0

을 – dgamma3

답변

3

내부 쿼리 (8 행에서 시작)가 복수 groupid을 반환합니다. 항등 연산자 =은 1 대 1을 비교하지만 원하는 것은 IN으로 할 수있는 일대 다 비교를 비교하는 것입니다.

그래서,이에 ... 7 호선 변경이의 코드에

AND s.GroupID = (

을이 문제를 해결하려면 :

AND s.GroupID IN (
0
SELECT GroupId 
FROM student 
GROUP BY GroupId 
HAVING count(*)> (
    SELECT count(*) 
    FROM scrumreview r, student s 
    WHERE r.reviewee = s.studentID 
    AND r.week = 5 
    ) 

반환 이상 1 개 행을, 하나의 행만 반환하도록 SQL을 수정해야하거나 다음 행을 변경해야합니다.

AND s.GroupID = (
IN에 0

:

AND s.GroupID IN (
0

대신이 시도 : 내부 대부분의 서브 쿼리 그룹에 의해 추가

SELECT groupName, 
g.groupId FROM `student` s, 
`group` g WHERE s.GroupId = g.GroupId 
AND s.GroupId IS NOT NULL 
AND s.tutorialId = 2 
GROUP by s.GroupId AND s.GroupID in (SELECT GroupId FROM student GROUP BY GroupId 
HAVING count(*)> (SELECT count(*) FROM scrumreview r, student s WHERE r.reviewee = 
s.studentID AND r.week = 5))