gpt4 book ai didi

mysql 查询不一致

转载 作者:行者123 更新时间:2023-11-29 09:02:26 26 4
gpt4 key购买 nike

以下查询在不同行上给出不同的结果,它应该在所有行上给出相同的结果。

这是查询:

select * from 
(SELECT mjla_db.StudentRecordTable2.studentId,
mjla_db.StudentTable2.lastName as `Last Name`,
mjla_db.StudentTable2.firstName as `First Name`,
sum(if(quizId=60,quizGrade,0)) as `Quiz 60`,
sum(if(quizId=64,quizGrade,0)) as `Quiz 64`,
sum(if(quizId=71,quizGrade,0)) as `Quiz 71`,
(sum(quizGrade*(1-abs(sign(quizId-60)))) +
sum(quizGrade*(1-abs(sign(quizId-64)))) +
sum(quizGrade*(1-abs(sign(quizId-71)))) )/3
as Averages
FROM mjla_db.StudentRecordTable2, mjla_db.StudentTable2
where (mjla_db.StudentRecordTable2.studentId=mjla_db.StudentTable2.studentId)
GROUP BY studentId) as A
where A.studentId
in (select mjla_db.ClassStudentTable2.studentId
from mjla_db.ClassStudentTable2
where mjla_db.ClassStudentTable2.classId='CS3071F2011');

测验数量是动态的,学生数量是动态的。

<小时/>

以下是表的内容,其中 mjla_db.StudentRecordTable2.classId='CS3071F2011'

+-------------+-----------+-----------+--------+
| classId | studentId | quizGrade | quizId |
+-------------+-----------+-----------+--------+
| CS3071F2011 | A1 | NULL | 60 |
| CS3071F2011 | A2 | NULL | 60 |
| CS3071F2011 | A5 | NULL | 60 |
| CS3071F2011 | A1 | NULL | 64 |
| CS3071F2011 | A2 | NULL | 64 |
| CS3071F2011 | A5 | NULL | 64 |
| CS3071F2011 | A7 | NULL | 64 |
| CS3071F2011 | A3 | NULL | 64 |
| CS3071F2011 | A4 | NULL | 64 |
| CS3071F2011 | A3 | NULL | 60 |
| CS3071F2011 | A4 | NULL | 60 |
| CS3071F2011 | A7 | NULL | 60 |
| CS3071F2011 | A1 | NULL | 71 |
| CS3071F2011 | A2 | NULL | 71 |
| CS3071F2011 | A5 | NULL | 71 |
| CS3071F2011 | A7 | NULL | 71 |
| CS3071F2011 | A3 | NULL | 71 |
| CS3071F2011 | A4 | NULL | 71 |
+-------------+-----------+-----------+--------+
<小时/>

这是查询的结果。

+-----------+-----------+------------+---------+---------+---------+----------+
| studentId | Last Name | First Name | Quiz 60 | Quiz 64 | Quiz 71 | Averages |
+-----------+-----------+------------+---------+---------+---------+----------+
| A1 | harry | thomas | 0 | 0 | 0 | 0.0000 |
| A2 | harry | willy | 0 | 0 | 0 | 0.0000 |
| A3 | billy | gregory | 0 | 0 | 0 | 0.0000 |
| A4 | goat | bobb | 0 | 0 | 0 | 0.0000 |
| A5 | nogood | tom | 0 | 0 | 0 | NULL |
| A7 | foobar | dick | 0 | 0 | 0 | NULL |
+-----------+-----------+------------+---------+---------+---------+----------+
<小时/>

查询的预期结果是所有平均值均为 0.0000,为什么最后两个不同?

此外,每当我执行查询时,一次只能查询一名学生 A5 和 A7 仍然显示为 NULL,其余的显示正常...

<小时/>

此问题的解决方案或实现相同目标的替代查询是可以接受的。我的目标是得到一个表格,其中每一行代表类(class)中的每个学生及其所有测验的成绩以及该学生所有测验的平均值。

最佳答案

您在数学计算中使用的所有 quizGrade 值均为 NULL ((sum(quizGrade*(1-abs(sign(quizId-60))))。 db NULL 进入几乎任何类型的操作,整个操作都会变成 null。问题不应该是为什么最后两个为 null,而是为什么前四个不是。

关于mysql 查询不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206677/

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