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#并在那里进行记录计数,但如果给定用户的记录很糟糕,那么我需要发送的记录数量会非常大。
我希望有一种相对便宜的方式来做到这一点。
答案 0 :(得分:3)
SELECT COUNT(*)
FROM
(
SELECT (SUM(wins) * 2) + SUM(ties) as Rank
FROM scores
GROUP BY userid
) tt
WHERE Rank > 35