SQL Sum и Count ОБЪЕДИНЯЮТ несколько таблиц

#sql #count #sum #multiple-tables

#sql #граф #сумма #несколько таблиц

Вопрос:

Пожалуйста, помогите, я хочу объединить эти два запроса

У меня есть 3 таблицы (places, ratings, places_image)

места

  • ID
  • Имя
  • Описание

рейтинги

  • ID
  • Оценка
  • place_id
  • идентификатор пользователя

places_image

  • ID
  • place_id
  • изображение

Это 2 запроса:

 SELECT places.*, SUM(rating) AS total_rating,COUNT(ratings.user_id) AS total_user FROM ratings, places WHERE ratings.place_id = places.id GROUP BY places.id
SELECT places.*, places_images.image FROM places, places_images WHERE places.id = places_images.place_id GROUP BY places.id
 

Запрос 1
введите описание изображения здесь

Запрос 2 введите описание изображения здесь

Я попытался выполнить этот запрос, но он выдает дублирующиеся данные для агрегатной функции

 SELECT places.id, places.name, places.description, places_images.image ,SUM(rating) AS total_rating,COUNT(ratings.user_id) AS total_user FROM places_images JOIN places ON places_images.place_id = places.id JOIN ratings ON ratings.place_id = places.id GROUP BY places.id
 

Запрос 3
введите описание изображения здесь

Как я могу это совместить?

Комментарии:

1. Ваш второй запрос неверно сформирован. GROUP BY Столбцы не согласуются с неагрегированными SELECT столбцами. Вопрос неясен. Вы должны предоставить образцы данных, желаемые результаты и четкое объяснение того, что вы подразумеваете под «объединить это».

Ответ №1:

Вам нужно использовать 2 внутренних соединения для place_id и user_id

Это будет что-то вроде

 SELECT SUM(r.rating) AS total_ratings, COUNT(r.user_id) AS total_users
FROM ratings r 
INNER JOIN places p ON p.id = r.user_id 
INNER JOIN places_image pi ON pi.place_id = r.place_id    
GROUP BY r.id
 

Комментарии:

1. Спасибо, но до сих пор не получил результата, он показывает одну и ту же сумму и подсчитывает более одного раза

2. Мне нужно будет взглянуть на дом. В моем текущем местоположении заблокированы изображения, чтобы я мог их видеть. Возможно, вы сможете вложить мой предыдущий ответ в другой оператор select и использовать ключевое слово DISTINCT . Не уверен, насколько вы продвинуты, но вы должны иметь возможность просматривать вложенные запросы и distinct.

Ответ №2:

Кажется, единственное, что мне нужно, это выполнить подзапрос

 select a.*, d.image, b.totalRating, c.totalUser from places a, ( select place_id, sum(rating) AS totalRating from ratings group by place_id ) b, ( select place_id, count(id) AS totalUser from ratings group by place_id ) c, places_images d where c.place_id = a.id and b.place_id = a.id and d.place_id = a.id GROUP BY a.id
 

Результат

Большое вам спасибо, GBU