【发布时间】: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 感谢您的帮助。