繁体   English   中英

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

[英]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语句的第一行日期。

不使用MAX功能的结果集

使用MAX功能

您的查询有很多问题:

  • 请勿在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()是仅返回列最大值的函数。 它对查询返回的其他值没有影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM