Как считать строки GROUP BY в T-SQL - PullRequest
5 голосов
/ 18 декабря 2011

У меня есть этот SQL-запрос, который выполняет GROUP BY для объединения всех строк, которые содержат один и тот же Player_id, но не один и тот же Game_id:

SELECT p.Player_id, 
       p.Name, 
       p.Position, 
       SUM(s.Goals) AS goalsb, 
       SUM(s.Assists) AS assistsb, 
       SUM(s.Points) AS pointsb
FROM Dim_Player AS p 
INNER JOIN Fact_Statistics AS s ON s.Player_id = p.Player_id
GROUP BY p.Player_id, p.Name, p.Position
ORDER BY pointsb DESC, goalsb DESC

Что я хочу сделать, это имплантировать COUNT каждый раз, когдаGROUP BY объединяет ряд с другим, чтобы создать новый столбец под названием «Сыгранные игры».Пример:

Player_id      Game_id    goalsb
8470598        465        1
8470598        435        1

это будет сгруппировано вместе с запросом SQL выше, чтобы стать:

Player_id          goalsb
8470598            2

Но я хочу иметь это:

Player_id          goalsb       Games_played
8470598            2            2

Ответы [ 2 ]

13 голосов
/ 18 декабря 2011

Если у вас есть повторяющиеся Game_id, и вы хотите подсчитать различные значения, вы можете добавить

COUNT (DISTINCT Game_id)

пункт вашего SELECT заявления.

0 голосов
/ 18 декабря 2011

Добавить функцию подсчета в запрос выбора. COUNT (*) считает каждую строку в группе, независимо от выбранных столбцов.

SELECT p.Player_id, p.Name, p.Position, SUM(s.Goals) AS goalsb, SUM(s.Assists) AS assistsb, SUM(s.Points) AS pointsb, COUNT(*) as [Games_played] 
FROM Dim_Player AS p INNER JOIN Fact_Statistics AS s ON s.Player_id = p.Player_id
GROUP BY p.Player_id, p.Name, p.Position, s.Game_id
ORDER BY pointsb DESC, goalsb DESC
...