我在尝试创建查询时遇到问题:
选择特定周内未完成所有同行评审的所有学生。
背景:每周,每个学生都必须对同组中的同龄人进行同行评审。
每个组的大小可以不同,这是我遇到的问题。
这是我当前的测试数据:
表1:同行评审表
表2:学生表。
这是我的初始查询,根据所有学生所做的同行评审数量对他们进行分组。我现在需要检查 count(*)
是否小于每个学生的小组大小:
SELECT *
FROM peerreview
RIGHT JOIN student
ON student. studentID = peerreview.reviewer
WHERE week = 11
GROUP BY studentID
HAVING Count(*) < ????
最佳答案
以下查询将返回已评论过同一组中所有学生的学生。
SELECT a.reviewer,
a.groupid
FROM (SELECT student2.studentID AS reviewer,
student1.groupid,
Count(*) AS cnt
FROM student student1
INNER JOIN peerreview
ON student1.studentID = peerreview.reviewee
INNER JOIN STUDENT STUDENT2
ON student2.studentID = peerreview.reviewer
WHERE student2.groupid = student2.groupid
AND peerreview.week = 11
GROUP BY student1.groupid,
student2.studentID) a
INNER JOIN (SELECT groupid,
Count(*) - 1 AS cnt
FROM student
GROUP BY groupid) b
ON a.groupid = b.groupid
AND a.cnt = b.cnt
关于mysql - SQL查询-动态子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782506/