首页 > 解决方案 > 我的查询缺少零的行

问题描述

我搜索了这个问题的答案,但没有找到这个特定问题的答案。我正在创建一个用于存储教师创建的课程的数据库,以及一个为每个班级注册的学生的查找表。我想运行一个查询,显示每个老师的班级和学生人数。正如您在下面的数据中看到的那样,老师有两个班级,学生人数为零,但只有一个班级在查询中返回。

查询:

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

因此,如您所见,“Mr. Jones' 3rd Period Class”没有行,但应该有。

标签: mysqlsql

解决方案


您需要以下中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;

查询中的所有反引号都会使其更难读写。


推荐阅读