MySQL:获取对应于某个 ID 的值的平均值

Posted

技术标签:

【中文标题】MySQL:获取对应于某个 ID 的值的平均值【英文标题】:MySQL: Get average for values that correspond to a certain a ID 【发布时间】:2021-10-17 13:45:17 【问题描述】:

我正在尝试创建一个表格,其中包含单独表格中每个车型的平均评论。输出应该类似于:

car_model_id avg_stars
1 3
2 5
3 1
... ...

我获取此表的方法是使用一个函数来计算给定的每个 car_id 的平均值。我从以下开始,但它产生了一个错误,因为这种格式返回一个表而不是一个 int。另外,在create table语句中getAverage()函数没有正确实现。

DELIMITER $$
CREATE FUNCTION getAverage(car_id_input int) RETURNS INT  
BEGIN
    SELECT AVG ( `car_id` )  /* To Fix */
    FROM `car_user_reviews`
    WHERE car_id = car_id_input;
END$$


CREATE TABLE `car_overall_stars` (
    `car_id` INT NOT NULL, 
    PRIMARY KEY (`car_id`),
    getAverage(car_id) AS `average_stars` FROM `car_user_reviews`, /* To Fix */
    FOREIGN KEY (`actor_id`) REFERENCES `actor` (`actor_id`) ON DELETE RESTRICT ON UPDATE CASCADE

);

关于我如何使这项工作的任何线索?或采取任何其他方法?

使用最新版本的 mysql 服务器。

【问题讨论】:

您可以先创建一个视图,例如create view car_rating_avg as select car_id, avg(review) from car_user_reviews group by car_id。然后,尝试使用这个视图,看看它是否足够快。如果是,请按原样使用。否则,创建一个新表并每晚执行truncate table newtable; insert into newtable select * from car_rating_avg; 以使用新的平均评分填充新表。 @zedfoxus 感谢您的帮助。 【参考方案1】:

正如@zedfoxus 在评论中所说的那样

create view car_rating_avg as select car_id, avg(review) from car_user_reviews group by car_id. 

【讨论】:

以上是关于MySQL:获取对应于某个 ID 的值的平均值的主要内容,如果未能解决你的问题,请参考以下文章

获取平均分高于某个值的老师教授的课程

MySQL - 其他表中的平均最新列

(运行的干净代码)根据来自另一个数据帧的日期间隔和字符串条件获取一个数据帧中的值的平均值

mysql获取某个字段平均值方法AVG函数的使用

查询计算包括NULL的值的平均值

如果单元格值包含列名,则 Excel 行中的值的平均值