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 的值的平均值的主要内容,如果未能解决你的问题,请参考以下文章