вычисление и сохранение среднего значения из столбца таблицы - PullRequest
0 голосов
/ 13 марта 2020

У меня есть стол для грузовиков и стол для (пищевых) грузовиков, а также Truck_ratings. В таблице truck_reviews хранятся отзывы, которые клиенты могут оставить для продовольственных грузовиков:

enter image description here

enter image description here

As как показано выше, таблица truck_reviews включает столбец для star_rating. Я хочу взять все звездные рейтинги для конкретного грузовика и вычислить их среднее значение, а затем сохранить это среднее значение в столбце avg_rating в таблице грузовых автомобилей. Я не смог понять, как это сделать. Помощь?

В случае, если это помогает разобраться в ситуации, друг прислал мне совет о том, как действовать:

Вы можете создать средневзвешенное значение на основе количества отзывов. Таким образом, вам также необходимо создать столбец, который отслеживает общее количество отзывов. Каждый раз, когда появляется новый рейтинг, вы можете сделать:

(current_avg * current_total_no_of_ratings) + new_rating / current_total_no_of_ratings + 1

Это даст вам новое среднее значение. Всякий раз, когда вы делаете это, убедитесь, что вы всегда увеличиваете общее количество оценок в таблице на 1

1 Ответ

1 голос
/ 14 марта 2020

Я бы не рекомендовал обновлять таблицу грузовиков каждый раз, когда появляется новый обзор грузовиков (например, колонка avg_rating). Это создает сложность и дополнительные операции с базой данных, которых можно избежать.

Прежде всего, пожалуйста, подумайте, если вам нужно сохранить это значение в базе данных. Вы всегда можете извлечь его с помощью простого запроса, например:

SELECT AVG(star_rating) FROM truck_reviews WHERE truck_id = x

Но если вам действительно нужно увидеть его вместе в базе данных со всеми оставшимися данными о грузовиках, я рекомендую вам создать Просмотр . Вы можете запросить его так же, как вы запрашиваете таблицу. Чтобы создать его, вам нужно что-то вроде:

CREATE VIEW trucks_view AS
SELECT *, 
(select AVG(star_rating) from trucks_reviews where truck_id = trucks.id) as 'avg_rating'
FROM trucks

И тогда вы можете запросить информацию о грузовике

SELECT * FROM trucks_view 

Он вернет именно то, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...