2011-12-17 9 views
5

tengo esta consulta SQL que hace un GROUP BY de fusionar todas las filas que contienen la misma player_id pero no el mismo game_id:Cómo contar GROUP BY filas de T-SQL

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 

lo que quiero do es implantar un COUNT cada vez que GROUP BY fusiona una fila con otra para crear una nueva columna llamada "Games played". Ejemplo:

Player_id  Game_id goalsb 
8470598  465  1 
8470598  435  1 

esto se agrupa con la consulta SQL anterior de ingresar:

Player_id   goalsb 
8470598   2 

Pero yo quiero tener esto:

Player_id   goalsb  Games_played 
8470598   2   2 
+2

No estoy seguro de si comprende la pregunta pero si agrega un 'COUNT (DISTINCT Game_Id)' a su instrucción SELECT para resolver el problema? –

+0

Eso funcionó. Estaba haciendo COUNT (*) –

+0

Le daré una respuesta :) –

Respuesta

12

Si ha de repetir Game_id 's y que le gustaría contar los valores distintos, se puede añadir una cláusula

COUNT (DISTINCT Game_id) 

a su declaración SELECT.

0

Añadir una función de recuento al selecto consulta. COUNT (*) cuenta cada fila en el grupo, independientemente de las columnas seleccionadas.

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