我搜索了此问题的答案,但没有找到针对此特定问题的答案。我正在建立一个数据库,用于存储老师创建的课程,以及用于每个课程的学生的查找表。我想运行一个查询,以显示每个老师的班级和学生人数。如下面的数据所示,该老师有两个班级,学生人数为零,但其中只有一个正在返回查询。
查询:
SELECT `c`.`ClassID` AS `id`,
`c`.`Class_Name` AS `name`,
`c`.`Class_Code` AS `code`,
COUNT(`e`.`EnrollID`) AS `count`
FROM `CMP_Classes` `c`
LEFT OUTER JOIN `CMP_Student_Enrollment` `e`
ON `c`.`ClassID` = `e`.`Enroll_ClassID`
AND `Class_Teacher` = 1
GROUP BY `e`.`EnrollID`
数据:
CMP_Classes表:
ClassID | Class_Name | Class_Code | Class_Teacher
1 | Mr. Jones' 1st Period Class | QYTNPCGK | 1
2 | Mr. Jones' 2nd Period Class | HZWNDZPM | 1
3 | Pizza | RRCXQNNE | 9
4 | Mr. Jones' 3rd Period Class | NFLBXFEQ | 1
CMP_Student_Enrollment表:
EnrollID | Enroll_Student | Enroll_ClassID
3 | 2 | 1
查询结果:
id | name | code | count
2 | Mr. Jones' 2nd Period Class | HZWNDZPM | 0
1 | Mr. Jones' 1st Period Class | QYTNPCGK | 1
因此,如您所见,“琼斯先生的第三节课”没有行,但应该有。
答案 0 :(得分:1)
您需要group by
中select
的未聚合列:
SELECT c.ClassID AS id, c.Class_Name AS name, c.Class_Code AS code,
COUNT(e.EnrollID) AS `count`
FROM CMP_Classes c LEFT OUTER JOIN
CMP_Student_Enrollment e
ON c.ClassID = e.Enroll_ClassID
WHERE c.Class_Teacher = 1
GROUP BY c.ClassID, c.Class_Name, c.Class_Code;
查询中的所有反引号使阅读和编写变得更加困难。