Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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中每条记录的平均值_Mysql_Sql_Average - Fatal编程技术网

Mysql 如何获取SQL中每条记录的平均值

Mysql 如何获取SQL中每条记录的平均值,mysql,sql,average,Mysql,Sql,Average,我需要获取SQL中每一行的平均值,例如: + -------------------+------+----------+ | course_feedback_id | rate |course_id | + -================--+------+----------+ | 1 | 4 | 1 | | 2 | 3 | 1 | | 3 | 2

我需要获取SQL中每一行的平均值,例如:

+ -------------------+------+----------+ | course_feedback_id | rate |course_id | + -================--+------+----------+ | 1 | 4 | 1 | | 2 | 3 | 1 | | 3 | 2 | 2 | + -------------------+------+----------+ 这是第一张桌子

+ ---+------+-------------+ | course_id | course_name | + ----------+-------------+ | 1 | a | | 2 | b | | 3 | c | | 4 | g | + ---+------+-------------+ 请帮助

从表1中选择课程id,t2.费率,其中课程id,选择课程id中的费率,从表组中按课程id t2计算的费率

SELECT `id`, AVG(`rate`) FROM `your_table` GROUP BY `id`
当您有多个条目/冗余条目,并且希望每个条目都找到一些聚合,因为在本例中,您得到了包含冗余记录的id,在这种情况下,请始终尝试使用group by作为group by,正如名称所示,group by将对应用它的列的记录进行分组,如果在这种情况下应用聚合平均值,则group by将是应用它的group WISE列,而不是像id 1那样作为一个整体,我们有2个冗余项,因此itll将应用avgid1_项。同样作为一个组

试试这个:

SELECT c.course_id, AVG(fb.rate)
FROM course AS c
INNER JOIN course_feedback AS fb ON fb.course_id = c.course_id
GROUP BY c.course_id

您是否尝试过使用GROUP BY?更明确一点:SELECT*,AVGrate from tableName GROUP BY ID只是一个注释,只要您使用聚合函数,min、max、avg、count、sum等。。。你真的应该包括一个小组。而mySQL的早期版本并不需要它;如果你拥有它们,你将更有可能达到预期的结果。好吧,你也需要有一个学习曲线。附带说明:即使这只是一个例子,您不应该对不是表唯一ID的列使用列名ID。这很容易导致误解和错误答案。我建议您将sql_mode设置为'ONLY_FULL_GROUP_BY';但在编写聚合查询时仍然存在问题。您的查询无效,此模式将导致一条可能对您有所帮助的错误消息。如果没有这种模式,MySQL会将您的查询转换为类似于从tableName中选择任意\u VALUEid、任意\u VALUErate、AVGrate这样的内容,从而任意选取值。仍然存在同样的问题。仅显示第一行在中没有id 2result@rook12320:查询没有问题。好的,我会删除所有那些不必要的反勾号,但无论如何它都会工作:-如果此查询的结果中没有ID 2,那么表中就没有ID 2。我使用提供的示例数据运行了查询。结果正常,ID为2的行显示良好。请看一下这个屏幕截图。你应该能够得到类似的结果。谢谢你,我只是更新了帖子,请再看看帖子。我认为这篇文章比其他文章更清楚before@rook12320:这个答案仍然正确。你不需要像你接受的答案那样加入。只需按课程id从课程反馈组中选择课程id,avgrate。这正是danielperaza发布的查询,只是名称根据您的更新请求进行了调整。感谢您的解释。实际上我有两张桌子。第一个表有id和rate,第二个表有table_id和name,我只想将它们合并在一起,得到每个id的平均值。我尝试了与您提到的相同的查询,但不起作用。第二个表在哪里?你从我刚才提到的查询中得到的错误是什么?如果你能分享错误,我只是更新了帖子,请再次查看帖子。我真的很感谢你的时间。什么是错误。尝试将速率替换为t2.rate,并检查它是否工作。我得到的结果与以前相同。请检查一下你这边。此外,一旦答案对您有效,请将其标记为正确。请注意,对于您提供的数据,您将不会得到课程id 3和4的任何结果,因为课程反馈表中没有与之匹配的行。如果需要它们,请考虑用左或右外部连接代替内部连接。我只需要显示这样的结果,因为3个记录和4个记录不需要注册。我会再试一次你的代码我很高兴它对你有用。您可能想在Coursera中查看一些SQL课程,在那里您可以了解更多有关SQL连接的信息,这是开发人员日常工作的重要组成部分。
SELECT `id`, AVG(`rate`) FROM `your_table` GROUP BY `id`
SELECT c.course_id, AVG(fb.rate)
FROM course AS c
INNER JOIN course_feedback AS fb ON fb.course_id = c.course_id
GROUP BY c.course_id