SQL MAX()函数返回错误的元组/结果

时间:2016-09-04 14:47:34

标签: mysql sql max

我在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 

但它返回带有错误attDate的Max Mark。返回的attDate是上面sql语句的第一行日期。

W3Schools

Result set without using MAX Function

1 个答案:

答案 0 :(得分:2)

您的查询存在许多问题:

  • 永远不要在FROM子句中使用逗号。始终使用明确的JOIN语法。
  • 永远不要混合聚合函数和非聚合列,除非未聚合列位于GROUP BY

出于您的目的,您可以使用ORDER BYLIMIT,而不是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()是一个只返回列最大值的函数。它对查询返回的其他值没有影响。