Как сделать выборку по нескольким таблицам в одном запросе sql?
всем привет у меня есть такая вот задача (Нужно отсортировать заведения по рейтингу из их отзывов, если заведение является сетью (например Макдональдс) то нужно считать его рейтингом среднее арифметическое рейтингов его филиалов, если заведение является филиалом его не нужно выводить, так как его рейтинг входит в рейтинг сети, если у заведения нет review то его рейтингом будет 0,
Для сетей нужно считать именно среднее арифметическое рейтингов филиалов а не среднее арифметическое рейтингов review всех филиалов,
если у филиала ко-во review будет не чётным такой подсчет будет не верным) . Подскажите пожалуйста в каком направлении мне нужно двигаться потому как я новичок в sql запросах и такой запрос для меня на этом этапе проблема.Буду благодарен за любую помощь.
Вот какой должен получиться результат , а это скрипт базы. На данный момент у меня получается только получить среднее по ревью и еще какие то результаты но только не то что нужно.
CREATE SCHEMA IF NOT EXISTS EstablishmentHomeWork;
USE EstablishmentHomeWork;
CREATE TABLE IF NOT EXISTS Establishment
(
id BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
name VARCHAR(100) NOT NULL,
is_chain BOOLEAN default false,
chain_id BIGINT,
FOREIGN KEY (chain_id)
REFERENCES Establishment (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE IF NOT EXISTS Review
(
id BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
establishment_id BIGINT NOT NULL,
FOREIGN KEY (establishment_id)
REFERENCES Establishment (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE IF NOT EXISTS Rate
(
id BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
rate DOUBLE,
type VARCHAR(100) NOT NULL,
review_id BIGINT NOT NULL,
FOREIGN KEY (review_id)
REFERENCES Review (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
SELECT
chains.name,
ROUND(AVG(rate), 2) avg_rate
FROM Establishment
JOIN Review ON Review.establishment_id = Establishment.id
JOIN Rate ON Rate.review_id = Review.id
JOIN Establishment chains ON chains.id = COALESCE(Establishment.chain_id, Establishment.id)
GROUP BY chains.name
ORDER BY avg_rate DESC
;
Здравствуйте, извините что снова к вам обращаюсь за помощью. Вы недавно помогали мне с sql задачей но там немного не корректный запрос, так как мне тогда не полностью задание объяснили.
Вот как должен быть выполнен запрос
Здесь показано как вручную выполнен запрос. Если вас не затруднит то помогите мне пожалуйста, так как sql для меня дается к сожалению с трудом.