在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#,并在那里进行记录计数,但如果给定的用户有一个糟糕的记录,我需要发送的记录数量就会变得非常多。

我希望有一种相对便宜的方法来做这件事。

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

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