Столбец суммирования после нескольких операций объединения и соединения - PullRequest
0 голосов
/ 04 декабря 2018

Я рассчитываю сумму столбца в зависимости от игрока, принадлежащего к определенной команде.У меня есть игровой стол и командный стол.В настоящее время у меня нет проблем, за исключением того, что по какой-то причине он не будет суммировать самый последний фрагмент моего запроса.Вот пример моего кода:

Select SUM(points)
from (select points
from player
Join team on player.full_name=team.player1
Where team.team_id = 8
and week =9
UNION
Select points
FROM player 
JOIN team on player.full_name=team.player2 
Where team.team_id = 8
and week =9
UNION
Select points
FROM player 
JOIN team on player.full_name=team.player3
Where team.team_id = 8
and week =9
UNION
Select points
FROM player 
JOIN team on player.full_name=team.player4
Where team.team_id = 8
and week =9

Любые идеи о том, почему это происходит, или лучший потенциальный способ выполнить это, будут высоко оценены!

1 Ответ

0 голосов
/ 04 декабря 2018

Ваш запрос кажется неполным, и вы должны использовать UNION ALL, чтобы получить полную сумму (если 2 или более игроков имеют одинаковые очки UNION DISTINCT исключит эти строки):

SELECT
    SUM( points )
FROM (
    SELECT
        points
    FROM player
    JOIN team ON player.full_name = team.player1
    WHERE team.team_id = 8
    AND week = 9
    UNION ALL
    SELECT
        points
    FROM player
    JOIN team ON player.full_name = team.player2
    WHERE team.team_id = 8
    AND week = 9
    UNION ALL
    SELECT
        points
    FROM player
    JOIN team ON player.full_name = team.player3
    WHERE team.team_id = 8
    AND week = 9
    UNION ALL
    SELECT
        points
    FROM player
    JOIN team ON player.full_name = team.player4
    WHERE team.team_id = 8
) d

, но яПолагайте, что ваш командный стол нуждается в изменениях для достижения большей эффективности

Обратите внимание, что использование UNION = UNION DISTINCT, т. е. "отличный" предполагается, если опущено.

Это может быть более эффективным:

SELECT
    SUM( player.points )
FROM player
WHERE player.full_name IN (
    SELECT distinct
        case when cj.n = 1 then team.player1
             when cj.n = 2 then team.player2
             when cj.n = 3 then team.player3
             when cj.n = 4 then team.player4
        end
    FROM team
    cross join (
       select 1 as n union all
       select 2 as n union all
       select 3 as n union all
       select 4 as n
       ) cj
    WHERE team.team_id = 8
    )
AND player.week = 9    ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...