3

さて、私が解決したいクエリ:

次のビジネス ルールを表現したいと思います。

追加のレビューが必要なグループ (特定のチュートリアル (tutorialID) および週 (week) の) を表示します。

したがって、基本的には、グループ内のメンバーの数を決定する必要があります。次に、その週とそのグループのすべてのスクラム レビューを集計し、この量がグループ内のメンバーの数と等しいかどうかを確認する必要があります。表示されている場合、これはその週のすべてのメンバーがレビューされているため、表示する必要がないことを意味します。

前提: メンバーは 1 週間に 1 回のみレビューを受けることができます。

次の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
        )
    )

学生 ここに画像の説明を入力

スクラムレビュー ここに asdasddescription を入力します

グループ ここに画像の説明を入力

4

3 に答える 3

3

内部クエリ (8 行目から) は、複数groupidの を返します。等値演算子=は 1 対 1 で比較しますが、必要なのは 1 対多で比較することであり、これは で実行できますIN

したがって、これを修正するには、7 行目のコードを次のように変更します...

AND s.GroupID = (

...これに:

AND s.GroupID IN (
于 2012-04-30T11:54:25.220 に答える
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)) 
于 2012-04-30T12:02:16.140 に答える
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
    )

複数の行を返します。その SQL を改良して 1 行のみを返すようにするか、次の行を変更する必要があります。

AND s.GroupID = (

IN へ:

AND s.GroupID IN (
于 2012-04-30T11:57:10.200 に答える