я в следующей таблице:SQL Server усредняет/Суммирование/Группы/Считают запросы Issue
╔══════════╦════════╦═══════╦═══════╗ ║ PlayerID ║ GameID ║ Stat1 ║ Stat2 ║ ╠══════════╬════════╬═══════╬═══════╣ ║ 1 ║ A ║ 2 ║ 1 ║ ║ 1 ║ B ║ 4 ║ 2 ║ ║ 1 ║ C ║ 6 ║ 5 ║ ║ 2 ║ A ║ 2 ║ 4 ║ ║ 2 ║ B ║ 2 ║ 6 ║ ║ 2 ║ C ║ 2 ║ 8 ║ ║ 2 ║ D ║ 4 ║ 2 ║ ║ 2 ║ E ║ 6 ║ 1 ║ ║ 3 ║ A ║ 5 ║ 9 ║ ║ 3 ║ G ║ 6 ║ 4 ║ ║ 3 ║ H ║ 4 ║ 2 ║ ║ 3 ║ N ║ 8 ║ 6 ║ ╚══════════╩════════╩═══════╩═══════╝
То, что я пытаюсь достичь следующее:
╔══════════╦═══════════╦═══════════════════╦═══════════════════╗ ║ PlayerID ║ GameCount ║ Stat 1 Avg/Game ║ Stat 2 Avg/Game ║ ╠══════════╬═══════════╬═══════════════════╬═══════════════════╣ ║ 1 ║ 3 ║ 4 ║ 2.66 ║ ║ 2 ║ 5 ║ 3.2 ║ 4.2 ║ ║ 3 ║ 4 ║ 5.75 ║ 5.25 ║ ╚══════════╩═══════════╩═══════════════════╩═══════════════════╝
Отсчет игры должен быть общее количество игр для каждого игрока и статистика должны быть в среднем за игру. В основном расчет PlayerID 1 состоит в следующем:
"Stat1 Среднее/Игра" = (2 + 4 + 6)/3 "STAT2 Среднее/Игра" = (1 + 2 + 5)/3
Я пробовал множество вариантов одного и того же запроса с комбинацией SUMS и COUNTS, но GameCount никогда не выходит правильно. Пример того, что я пробовал, ниже
SELECT PlayerID,
COUNT(GameID) AS GameCount,
SUM(Stat1)/COUNT(GameID) "Stat 1 Avg/Game",
SUM(Stat2)/COUNT(GameID) "Stat 2 Avg/Game"
FROM PublishedStats A
GROUP BY PlayerID
SELECT PlayerID,
COUNT(GameID) OVER (PARTITION BY PlayerID) AS GameCount,
SUM(Stat1)/COUNT(GameID) OVER (PARTITION BY PlayerID) "Stat 1 Avg/Game",
SUM(Stat2)/COUNT(GameID) OVER (PARTITION BY PlayerID) "Stat 2 Avg/Game",
FROM Stats
GROUP BY PlayerID, GameID
Я думаю, что ваш первый запрос правильный, и вам не нужен второй. – Jasmine
Если «GameID» не содержит значений NULL, я согласен с @Jasmine - какие значения вы действительно получаете от своего первого запроса? –
@Jasmine Извините, что я создал базовые данные неправильно, PlayerID 1 должен иметь две статистики для игры A и один для игры B. В вышеприведенном запросе утверждается, что он сыграл 3 игры, когда на самом деле он сыграл 2, потому что есть две разные статистики за одну игру - чант 1 час назад удалить – chunt