在SQL中执行GROUP BY后计算记录数

时间:2011-06-23 04:11:11

标签: c# .net sql sql-server

SQL中是否有办法计算已应用GROUP BY的给定记录集中的记录数?

我有一张表格,其中包含一系列游戏中所有用户的胜利,关系和损失的每周摘要。看起来有点像这样:

userid  weekid  wins  losses  ties
1       1       10    5       2
1       2       11    3       3
1       3       8     9       0
2       1       11    6       0
2       2       7     9       1
2       3       9     7       1
3       1       3     14      0
3       2       7     9       1
3       3       6     9       2

我想确定给定用户的排名。我会通过计算比用户更好的胜利,关系和损失组合的用户数量来做到这一点。例如,如果我想确定用户#3的等级,我可以使用此查询,但它只能让我到达一半:

SELECT COUNT(userid) 
FROM scores
GROUP BY userid
HAVING (SUM(wins) * 2) + SUM(ties) > 35

结果如下:

COUNT(userid)
3
3

这给了我一个包含2条记录的记录集(意思是他排名第三)。我真正想要的只是记录的数量(2)而不是记录本身。我唯一能想到的是将记录集转储到临时表并在那里进行COUNT(),但这非常昂贵。或者我可以将数据集交还给C#并在那里进行记录计数,但如果给定用户的记录很糟糕,那么我需要发送的记录数量会非常大。

我希望有一种相对便宜的方式来做到这一点。

1 个答案:

答案 0 :(得分:3)

SELECT COUNT(*) 
FROM
(
    SELECT (SUM(wins) * 2) + SUM(ties) as Rank
    FROM scores
    GROUP BY userid
) tt
WHERE Rank > 35