Правильно ли используется count () для моего запроса? - PullRequest
0 голосов
/ 03 февраля 2020

Найти все команды, которые выиграли только 1 игру в турнире № 3 (1 столбец, 4 строки)

Мой мыслительный процесс для создания этого запроса - подсчет (WonGame) для каждой команды. И то, что это число не может быть равно 1. Но когда я запускаю свой запрос, я не получаю результатов (я должен получить 4 команды).

Экспериментируя со своим запросом, я изменил значение равно больше, и это вернуло 8 результатов. Поэтому я не понимаю, почему равно 1 не возвращает результатов.

Также я проверил свои данные, и действительно есть 4 команды, которые только одну игру во время Турнира № 3.

select Teams.TeamName
from Teams
join Bowlers on Teams.TeamID = Bowlers.TeamID
join Bowler_Scores on Bowlers.BowlerID = Bowler_Scores.BowlerID
join Match_Games on Bowler_Scores.GameNumber = Match_Games.GameNumber
join Tourney_Matches on Match_Games.MatchID = Tourney_Matches.MatchID
where Tourney_Matches.TourneyID = 3
group by Teams.TeamName
having count(Bowler_Scores.WonGame) = 1;

Структура БД Боулинг *

Данные Боулинг-лиги

enter image description here

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Диаграмма, по-видимому, указывает на то, что отношения между Match_Games и Bowler_Scores находятся в ОБАХ от MatchID и GameNumber

Если вы измените условия JOIN на оба столбца

join Match_Games on Bowler_Scores.GameNumber = Match_Games.GameNumber and Bowler_Scores.MatchID = Match_Games.MatchID

Тогда вы можете получить требуемый ответ.

1 голос
/ 03 февраля 2020

Я могу только догадываться о том, как на самом деле выглядят ваши данные. Однако сомнительно, что это выражение:

having count(Bowler_Scores.WonGame) = 1;

делает то, что вы хотите. Это подсчитывает количество не NULL значений. Предположительно, WonGame как некое значение, такое как «1» или «W» для победителя. Если бы значение было 1, то правильное выражение было бы:

having sum(Bowler_Scores.WonGame) = 1

Это всего лишь предположение, но без лучшего описания ваших данных.

РЕДАКТИРОВАТЬ:

По комментарию:

having sum(convert(int, Bowler_Scores.WonGame)) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...