在查询中使用COUNT和GROUP BY以及连接限制结果

时间:2017-05-02 00:49:59

标签: mysql

我试图从一个表中获取特定字段的计数,同时还从其他表中检索数据。查询已成功运行,但结果有限。

以下是我的表格:

学生 - studentID,fname,lname,yearLevel,rollClass

- classID,classCode,subjectID

科目 - subjectID,subjectName

studentclasses - studentClassID,studentID,classID

当我运行此查询时,我会从所有滚动类(大约100,000个具有77个滚动类的条目)获得完整的学生类列表。 roll类的格式为:YearlevelLetter(即10A,11S)。

SELECT 
    s.EQ_ID, s.rollClass, c.classCode, su.subjectName
FROM 
    students AS s INNER JOIN 
    (
        studentclasses AS sc INNER JOIN 
        (
            classes AS c  INNER JOIN subjects AS su
            ON c.subjectID = su.subjectID
        ) ON sc.classID = c.classID
    ) ON s.studentID = sc.studentID

但是,我想计算每个科目中每个卷班的学生人数,所以我有以下问题:

SELECT 
COUNT(s.EQ_ID), s.rollClass, su.subjectName
FROM 
    students AS s INNER JOIN 
    (
        studentclasses AS sc INNER JOIN 
        (
            classes AS c  INNER JOIN subjects AS su 
            ON c.subjectID = su.subjectID
        ) ON sc.classID = c.classID
    ) ON s.EQ_ID = sc.EQ_ID
GROUP BY s.rollClass, su.subjectName

这个查询只给出了前4个滚动类(它遇到的前4个)的结果,只有其余的不存在。

我错过了什么,当我知道数据库中有更多数据时,为什么会得到有限的结果?

我将查询直接输入到PHPMyadmin的SQL部分。所有表都使用MyASAM。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果它是phpMyAdmin的怪异,你可以尝试添加并看看会发生什么:

ORDER BY s.rollClass, su.subjectName

你不应该需要它,但是根据你的评论,它会看到它rollClass的前4个值......

答案 1 :(得分:0)

感谢所有的帮助,感谢Shadow提供的答案。这是由PHPMyadmin的问题引起的。当我使用较新版本的PHPMyadmin将数据复制到另一台服务器时,查询显示了所有结果。

答案 2 :(得分:-1)

您的第一个查询是选择4列:

SELECT s.EQ_ID, s.rollClass, c.classCode, su.subjectName

您的第二个查询仅选择其中三个列,然后按两个分组:

SELECT COUNT(s.EQ_ID), s.rollClass, su.subjectName

这意味着它汇总了c.classCode的不同值。也许尝试这样来汇总第一个查询的结果:

SELECT COUNT(s.EQ_ID), s.rollClass, c.classCode, su.subjectName
FROM students AS s INNER JOIN (studentclasses AS sc INNER JOIN (classes AS c  INNER JOIN subjects AS su ON c.subjectID = su.subjectID) ON sc.classID = c.classID) ON s.EQ_ID = sc.EQ_ID
GROUP BY s.rollClass, c.classCode, su.subjectName