Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL MAX()函数返回错误的元组/结果_Mysql_Sql_Max - Fatal编程技术网

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

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

我用php/mysql制作了一个学生辅导系统。这里是表格结构

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;