gpt4 book ai didi

mysql - MySQL NULL 结果的返回值

转载 作者:行者123 更新时间:2023-11-30 22:07:55 25 4
gpt4 key购买 nike

我在 MySQL 工作。我有以下查询:

SELECT tar.ID, COUNT(tsr.StudentID) AS Students
FROM Teacher_ApplicationRecord tar
LEFT JOIN Teacher_StudentRecord tsr ON sar.ID = tsr.TeacherID AND tsr.Session = 1 AND tsr.Year = 2017
WHERE tar.ApplicationYear = 2017
AND tar.Session1 = 1

此查询不返回任何结果。但是,如果我从 SELECT 语句中取出 COUNT(tsr.StudentID),它会为 tsr 表返回所有带 NULL 的教师 ID .

我想要的是一个返回所有教师 ID 和分配给该教师的学生人数的查询,如果结果为 NULL,则为 0。

我已经尝试了 COALESCE(COUNT(tsr.StudentID), 0) AND IFNULL(COUNT(tsr.StudentID), 0) 到目前为止没有成功。还有其他想法吗?

更新:tsr 表有 4 列:TeacherID、StudentID、Year、Session。它还没有记录。明年将学生分配给教师时,它将被填充。

tar 表中有一个 TeacherID 列表以及一些其他数据,例如年级和教师。

我希望我的结果如下所示:

+-----------+-----------------+
| TeacherID | COUNT(StudentID)|
+-----------+-----------------+
| 1 | 0 |
+-----------+-----------------+
| 2 | 0 |
+-----------+-----------------+
etc.

随着学生被分配给教师,COUNT(StudentID) 数字将会增加。希望这会有所帮助。

更新 2tar 表如下所示:

+---------+---------------+
|TeacherID|ApplicationYear|
+---------+---------------+
| 1 | 2017 |
+---------+---------------+
| 2 | 2017 |
+---------+---------------+
| 3 | 2017 |
+---------+---------------+

它还有其他列,但它们与问题无关。

tsr 表如下所示:

+---------+---------+----+-------+
|TeacherID|StudentID|Year|Session|
+---------+---------+----+-------+
| 1 | 10 |2017| 1 |
+---------+---------+----+-------+
| 1 | 11 |2017| 1 |
+---------+---------+----+-------+
| 2 | 12 |2017| 1 |

最佳答案

您可以尝试将教师表连接到学生表(按此顺序),然​​后使用 GROUP BY 计算每位教师的学生数:

SELECT tsr.ID,
COUNT(sar.ID) AS numOfStudents -- count no matching students as zero
FROM Teacher_StudentRecord tsr
LEFT JOIN Student_ApplicationRecord sar
ON tsr.TeacherID = sar.ID AND
tsr.Session = 1 AND
tsr.Year = 2017
GROUP BY tsr.ID

此处 LEFT JOIN 的用处是教师没有匹配学生的边缘情况。在这种情况下,在聚合发生之前,结果集将有该教师的单个记录,学生 ID 值为 NULLCOUNT 将忽略它,导致正确的零计数。

请注意,我删除了 WHERE 子句,其预期逻辑已包含在 ON 子句中。此 WHERE 子句在教师记录甚至可以聚合之前删除了您的结果。

更新:

请尝试以下查询以查看是否得到结果:

SELECT tsr.ID,
COUNT(sar.ID) AS numOfStudents
FROM Teacher_StudentRecord tsr
LEFT JOIN Student_ApplicationRecord sar
ON tsr.TeacherID = sar.ID
GROUP BY tsr.ID

如果这没有给您任何结果,那么实际上没有教师与任何学生相关联,您的数据就有问题。

这是一个使用您的示例数据的演示。它按预期工作:

SQLFiddle

关于mysql - MySQL NULL 结果的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com