【问题标题】:How to count GROUP BY rows in T-SQL如何在 T-SQL 中计算 GROUP BY 行
【发布时间】:2012-01-22 19:52:11
【问题描述】:

我有这个 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

我想要做的是每次 GROUP BY 将一行与另一行合并以创建一个名为“已玩游戏”的新列时植入一个 COUNT。示例:

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

【问题讨论】:

  • 不确定您是否理解这个问题,但在您的 SELECT 语句中添加 COUNT (DISTINCT Game_Id) 是否可以解决问题?
  • 那行得通。我在做 COUNT (*)
  • 我会用它来回答:)

标签: sql tsql count counter


【解决方案1】:

如果您有重复的Game_id 并且您想计算不同的值,您可以添加一个

COUNT (DISTINCT Game_id)

SELECT 声明的子句。

【讨论】:

    【解决方案2】:

    向选择查询添加计数函数。 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
    

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多