在SQL中执行GROUP BY后计算记录数
本文关键字:计算 记录 BY GROUP SQL 执行 | 更新日期: 2023-09-27 17:59:57
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#,并在那里进行记录计数,但如果给定的用户有一个糟糕的记录,我需要发送的记录数量就会变得非常多。
我希望有一种相对便宜的方法来做这件事。
SELECT COUNT(*)
FROM
(
SELECT (SUM(wins) * 2) + SUM(ties) as Rank
FROM scores
GROUP BY userid
) tt
WHERE Rank > 35