gpt4 book ai didi

mysql - 无法使用 GROUP BY 子句获取字段

转载 作者:行者123 更新时间:2023-11-29 05:22:46 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的查询来查找平均分最高的人并显示有关他们的一些基本信息。它正在检索正确的记录,但我无法让 MySQL 显示 students.classId 字段。我在 LibreOffice Base 中遇到的错误是

Not in aggregate function or group by clause.

查询错误:

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 不是很熟悉,但我认为在这种情况下没有必要发布表定义。如果我错了,请在评论中留言,我会尽快更新问题。

请注意,这不是作业。

最佳答案

有问题的是这个:

`students`.`classId`

由于 GROUP BY 查询为连接表的一行或多行生成单行,因此该单行可能对应于多个 students classId 值。

这就是 SQL 要求您修复的问题:它想知道您希望它返回 students.classId 的多个潜在项目中的哪一个。这两个选择是添加一个聚合函数,比如说

MIN(`students`.`classId`) AS StudentClassId

或者在 GROUP BY 子句中使用 students.classId:

GROUP BY `students`.`surname`, `students`.`name`, `students`.`classId`

请注意,如果您选择后面的选项,则聚合将针对每个学生/类(class)对,而不是每个学生。

关于mysql - 无法使用 GROUP BY 子句获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com