Mysql SQL MAX()函数返回错误的元组/结果
我用php/mysql制作了一个学生辅导系统。这里是表格结构Mysql SQL MAX()函数返回错误的元组/结果,mysql,sql,max,Mysql,Sql,Max,我用php/mysql制作了一个学生辅导系统。这里是表格结构 Student ------StudentAssignment -------Assignment -----attempt StudentAssignment - stuID, assID, attID attempts - attID, marks, assDate 学生可以为一项作业做三次尝试。 我使用下面的SQL语句获取其attDate的MAX标记 SELECT a.title, MAX(att.marks), a.tot
Student ------StudentAssignment -------Assignment -----attempt
StudentAssignment - stuID, assID, attID
attempts - attID, marks, assDate
学生可以为一项作业做三次尝试。
我使用下面的SQL语句获取其attDate的MAX标记
SELECT a.title, MAX(att.marks), a.totalmarks, att.attDate
FROM attempts att, studentassignment sa, assignment a
WHERE sa.attID=att.attID AND sa.assID=a.ass_ID AND sa.assID=:assID AND sa.stuID=:stuID
但它返回的Max Mark带有错误的attDate。返回的attDate是上述sql语句的第一行日期
您的查询有很多问题:
- 切勿在
子句中使用逗号。始终使用显式FROM
语法JOIN
- 切勿混合使用聚合函数和未聚合列,除非未聚合列位于
分组依据中
ORDER BY
和LIMIT
,而不是MAX()
:
请记住,
MAX()
是一个只返回列的最大值的函数。它对查询返回的其他值没有影响。您的查询有许多问题:
- 切勿在
子句中使用逗号。始终使用显式FROM
语法JOIN
- 切勿混合使用聚合函数和未聚合列,除非未聚合列位于
分组依据中
ORDER BY
和LIMIT
,而不是MAX()
:
请记住,
MAX()
是一个只返回列的最大值的函数。它对查询返回的其他值没有影响。聚合列本身没有问题,没有group by
尝试使用联接条件和group by a,titleaggregate列本身没有问题,没有group by
尝试使用联接条件和group by a,title
SELECT a.title, att.marks, a.totalmarks, att.attDate
FROM attempts att JOIN
studentassignment sa
ON sa.attID=att.attID JOIN
assignment a
ON sa.assID=a.ass_ID
WHERE sa.assID = :assID AND sa.stuID = :stuID
ORDER BY att.marks DESC
LIMIT 1;