Использование Inner Join для 3 таблиц в MySQL, подсчет значений вхождений в одной таблице - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь объединить 3 таблицы в MySQL.

SELECT location_details.location_name, count(click_details.click_id) 
FROM location_details
INNER JOIN hotel_details ON hotel_details.location_id = 
location_details.location_id 
INNER JOIN click_details ON click_details.hotel_id = hotel_details.hotel_id

И я хотел бы собрать количество вхождений для каждого местоположения в соответствии с количеством кликов, произведенных из этого местоположения.

Вместо этого я получаю одно значение, в данном случае «Лондон» со всеми приписанными ему кликами, что явно не соответствует действительности.

Ниже приведена схема моей базы данных:

click_details

click_id STRING
click_timestamp TIMESTAMP
hotel_id STRING
partner_id STRING
session_id STRING

hotel_details

hotel_id STRING
hotel_name STRING
hotel_star INTEGER
location_id STRING

location_details

location_id STRING
location_name STRING
country_id STRING

Любая помощь будет высоко ценится! :)

Большое спасибо.

1 Ответ

0 голосов
/ 25 августа 2018

Вам не хватает group by. Я бы порекомендовал некоторые другие изменения в запросе:

SELECT l.location_name, COUNT(c.click_id) 
FROM location_details l INNER JOIN
     hotel_details h
     ON h.location_id = l.location_id INNER JOIN
     click_details c
     ON c.hotel_id = h.hotel_id
GROUP BY l.location_name
ORDER BY COUNT(c.click_id) DESC;

Обратите внимание на использование псевдонимов таблиц. Это облегчает написание и чтение запросов.

Почти в любой базе данных - включая самые последние версии MySQL с настройками по умолчанию - ваш запрос вызовет ошибку, поскольку у вас есть COUNT() и неагрегированный столбец в SELECT, без GROUP BY .

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