[英]SQL MAX() Function return wrong tuple/result
我在php / mysql中建立了学生分配系统。 这里的表结构。
Student ------StudentAssignment -------Assignment -----attempt
StudentAssignment - stuID, assID, attID
attempts - attID, marks, assDate
一个作业可以进行3次尝试。 我使用以下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
但它会返回错误的atDDate的Max Mark。 返回的attDate是上述sql语句的第一行日期。
您的查询有很多问题:
FROM
子句中使用逗号。 始终使用显式的JOIN
语法。 GROUP BY
中, 否则切勿混合使用聚合函数和未聚合的列。 为了您的目的,您可以使用ORDER BY
和LIMIT
,而不是MAX()
:
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;
请记住, MAX()
是仅返回列最大值的函数。 它对查询返回的其他值没有影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.