【发布时间】:2014-05-19 14:42:23
【问题描述】:
我正在尝试创建一个简单的查询,以查找平均分最高的人并显示有关他们的一些基本信息。它正在检索正确的记录,但我无法让 MySQL 显示 students.classId 字段。我在 LibreOffice Base 中遇到的错误是
不在聚合函数或 group by 子句中。
查询错误:
SELECT CONCAT(`students`.`surname`, CONCAT(' ', `students`.`name`)) AS `Student`,
AVG(CAST(`marks`.`mark` AS DECIMAL (10, 2))) AS `Average`,
`students`.`classId`
FROM `students`, `marks`, `subjects`
WHERE `marks`.`subjectId` = `subjects`.`subjectId`
AND `students`.`studentId` = `marks`.`markId`
GROUP BY `students`.`surname`, `students`.`name`
ORDER BY `Average` DESC LIMIT 1;
查询无误:
SELECT CONCAT(`students`.`surname`, CONCAT(' ', `students`.`name`)) AS `Student`,
AVG(CAST(`marks`.`mark` AS DECIMAL (10, 2))) AS `Average`
FROM `students`, `marks`, `subjects`
WHERE `marks`.`subjectId` = `subjects`.`subjectId`
AND `students`.`studentId` = `marks`.`markId`
GROUP BY `students`.`surname`, `students`.`name`
ORDER BY `Average` DESC LIMIT 1;
我对 SQL 并没有真正的经验,但我认为在这种情况下不需要发布表定义。如果我错了,请在 cmets 中留言,我会尽快更新问题。
请注意,这不是家庭作业。
【问题讨论】:
-
在使用 group by 之前,您需要在选择列表中有列
-
@AbhikChakraborty 我已经尝试删除
CONCAT()并单独列出列,但错误是一样的。 -
不要使用隐式连接语法 - 并且,作为经验法则,您应该 GROUP BY 您选择的相同内容 [例如(CONCAT(s.surname, CONCAT(' ', s.name))]