mysql - SQL查询-动态子查询

标签 mysql sql

我在尝试创建查询时遇到问题:

选择特定周内未完成所有同行评审的所有学生。

背景:每周,每个学生都必须对同组中的同龄人进行同行评审。

每个组的大小可以不同,这是我遇到的问题。

这是我当前的测试数据:

peer review table

student table

表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 

See SqlFiddle

关于mysql - SQL查询-动态子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782506/

相关文章:

php - 如何使用递归函数返回 true

php - 使用 JOINS 连接多个 MySQL 表中的用户数据

php - 搜索关键字并应用过滤器

php - Laravel Eloquent : how to select datas from a relation in a collection or change their names before being turned into JSON?

sql - PostgreSQL 将数据聚合成单行

mysql - 在 SQL : Error 中使用转换语句

mysql - Cakephp Shell无法连接到mysql

C#静态方法问题

mysql - 从函数中进行选择后,组函数的使用无效

mysql - SQL从列的末尾删除部分字符串