2011-06-23 76 views
1

SQL中是否有方法来计算已应用GROUP BY的给定记录集中的记录数?在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#并在那里做记录计数,但是如果给定的用户有可怕的记录,那么我需要发送的记录数就相当多。

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

回答

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

工程就像一个魅力!谢谢! – Andrew