Как выбрать атрибут из объединяемых таблиц с агрегатной функцией? - PullRequest
0 голосов
/ 13 сентября 2018

Это три примера таблиц

Команда

+-------------+-------------+
| TeamID      | TeamName    |             
+-------------+-------------+
| 11          | AA          | 
+-------------+-------------+
| 12          | BB          | 
+-------------+-------------+
| 13          | CC          |
+-------------+-------------+

Match

+-------------+
| MatchID     |        
+-------------+
| 1           |
+-------------+
| 2           | 
+-------------+
| 3           | 
+-------------+

Teammatch

+-------------+-------------+-------------+
| TmID        | Team_ID     |  MatchID    |
+-------------+-------------+-------------+
| 21          | 11          | 1           |
+-------------+-------------+-------------+
| 22          | 11          | 2           |
+-------------+-------------+-------------+
| 23          | 12          | 1           |
+-------------+-------------+-------------+
| 24          | 13          | 2           |
+-------------+-------------+-------------+
| 24          | 11          | 3           |
+-------------+-------------+-------------+

Цель состоит в том, чтобы перечислить TeamName, где они посещают матчи более одного раза, как показано ниже:

+-------------+
| TeamName    |             
+-------------+
| AA          | 
+-------------+

Вот что я пробовал:

SELECT TeamName 
FROM  Team T, Match M, Teammatch TM
WHERE T.TeamID = TM.TeamID AND
M.MatchID = TM.MatchID
......

Но я действительно не могу понять, что делать дальше.

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

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Не проверено, но запрос, подобный приведенному ниже, должен работать. Сгруппируйте по TeamID, чтобы получить по одной строке для каждой команды, затем объедините MatchID по количеству, чтобы получить количество совпадений для этой команды. Ограничьте результаты, отображаемые с помощью оператора HAVING для этого количества.

SELECT T.TeamName
FROM TeamMatch TM
    JOIN Match M ON M.MatchID = TM.MatchID
    JOIN Team T ON t.TeamID = TM.TeamID
GROUP BY TeamID
HAVING COUNT(MatchID) > 1
0 голосов
/ 13 сентября 2018

Попробуйте

    SELECT TeamName 
    FROM  Team T 
    JOIN  Teammatch TM ON T.TeamID = TM.TeamID
    JOIN  Match M ON M.MatchID = TM.MatchID
    GROUP BY TeamName
    HAVING COUNT(*) > 1

Конечно, вы можете заменить COUNT (*) на COUNT (DISTINCT M.MatchID) или аналогичный.

...