Запрос SQL Join приносит несколько результатов - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть 2 таблицы.Один перечисляет все голы, забитые в английской Премьер-лиге и кто забил, а другой - номера команд каждого игрока в лиге.

Я хочу сделать объединение, чтобы таблица суммировала общее количествоголов по имени игрока, а затем ищет номер отряда этого игрока.

Таблица A [goal_scorer] [enter image description here] 1

Таблица B [отряды][enter image description here] 2

У меня есть SQL-запрос ниже:

SELECT goal_scorer.*,sum(goal_scorer.number),squads.squad_number 
FROM goal_scorer 
Inner join squads on goal_scorer.name=squads.player 
group by goal_scorer.name

У меня проблема в том, что в результате сумма 'число'слишком высокий и, кажется, содержит повторяющиеся строки.Например, Аарон Леннон забил 33 раза, а не 264. Как показано ниже.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Может быть, вы хотите что-то подобное?

SELECT goal_scorer.*, s.total, squads.squad_number 
FROM goal_scorer 
LEFT JOIN (
  SELECT name, sum(number) as total
  FROM goal_scorer
  GROUP BY name
) s on s.name = goal_scorer.name
JOIN squads on goal_scorer.name=squads.player 

Есть и другие способы сделать это, но здесь я использую подзапрос, чтобы получить сумму по игроку.NB. Большинство современных платформ SQL поддерживают оконные функции, чтобы сделать это тоже.

Также, вероятно, не нужны левые в подзапросе (так как мы знаем, что всегда будет хотя бы одно имя), но япоставьте его на тот случай, если ваш фактический вариант использования будет более сложным.

0 голосов
/ 29 ноября 2018

Можете ли вы попробовать это, если вы используете sql-сервер ?

select * 
from squads
outer apply(
            selecr sum(goal_scorer.number) as score
            from goal_scorer where goal_scorer.name=squads.player
           )x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...