SQL: результаты запроса MS Access изменяются при добавлении нового внутреннего объединения - PullRequest
2 голосов
/ 28 мая 2019

Три таблицы:

  1. Операции
  2. Матчи
  3. Рейтинги

Каждое совпадение связано с одним действием (AID какиностранный ключ).И у каждого действия есть несколько обзоров.

Я пытаюсь подсчитать количество совпадений, с которыми связано каждое действие:

SELECT MATCHES.AID, Count(MATCHES.AID) AS CountOfAID
FROM ACTIVITIES INNER JOIN MATCHES ON ACTIVITIES.AID = MATCHES.AID
GROUP BY MATCHES.AID;

Возвращает это просто отлично:

What I want to show

Но как только я добавлю внутреннее объединение, я также добавлю среднюю оценку каждого действия:

SELECT ACTIVITIES.[Activity Name], Count(MATCHES.AID) AS CountOfAID, 
Avg(RATINGS.Rating) AS AvgOfRating
FROM (ACTIVITIES INNER JOIN MATCHES ON ACTIVITIES.AID = MATCHES.AID) INNER 
JOIN RATINGS ON ACTIVITIES.AID = RATINGS.AID
GROUP BY ACTIVITIES.[Activity Name];

Это происходит:

What shows

Как обойти это?

1 Ответ

2 голосов
/ 28 мая 2019

Поскольку и обзоры, и совпадения объединены в действие, но между ними нет никакой связи, вы по сути создаете продукт соответствия совпадений для каждого действия. Один из подходов к получению желаемого результата - выполнить группировку по подзапросам для совпадений и проверок (независимо) и только затем присоединить их к действиям:

SELECT a.[Activity Name], CountOfAID, AvgOfRating
FROM   activities a
JOIN   (SELECT   aid, COUNT(*) AS CountOfAID
        FROM     matches
        GROUP BY aid) m ON a.aid = m.aid
JOIN   (SELECT   aid, AVG(rating) AS AvgOfRating
        FROM     ratings
        GROUP BY aid) r ON a.aid = r.aid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...