mysql - 我的查询缺少零的行
问题描述
我搜索了这个问题的答案,但没有找到这个特定问题的答案。我正在创建一个用于存储教师创建的课程的数据库,以及一个为每个班级注册的学生的查找表。我想运行一个查询,显示每个老师的班级和学生人数。正如您在下面的数据中看到的那样,老师有两个班级,学生人数为零,但只有一个班级在查询中返回。
查询:
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”没有行,但应该有。
解决方案
您需要以下中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;
查询中的所有反引号都会使其更难读写。
推荐阅读
- python - 如何解决“溢出错误:int 太大而无法转换为浮点数”?
- python-3.x - 寻找 NASNET 分类代码从 Scratch 开始训练
- regex - 使用正则表达式选择字符串并拆分/输出到多个文件
- reactjs - 有没有办法使用 React Router 重定向到默认的 url 哈希?
- c++ - 了解递归函数的执行顺序
- amazon-web-services - 是否可以在 docker 容器上安装 AWS FSX 存储?
- javascript - 使用动态服务器日志文件内容的烧瓶应用程序更新前标记
- java - 使对象同时运行
- json - Django没有发送正确的json响应
- java - 评估 Int 的最后 2 位数字?