#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
Я попытался выполнить этот запрос, но он выдает дублирующиеся данные для агрегатной функции
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
Как я могу это совместить?
Комментарии:
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