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

Posted

技术标签:

【中文标题】在 SQL 中执行 GROUP BY 后计算记录数【英文标题】:Calculating the number of records after doing a GROUP BY in SQL 【发布时间】:2011-06-23 04:11:11 【问题描述】:

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】:
SELECT COUNT(*) 
FROM
(
    SELECT (SUM(wins) * 2) + SUM(ties) as Rank
    FROM scores
    GROUP BY userid
) tt
WHERE Rank > 35

【讨论】:

像魅力一样工作!谢谢!

以上是关于在 SQL 中执行 GROUP BY 后计算记录数的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

数据库Group By类型语句统计记录条数

SQL中group by 与 compute by

mysql为啥group by不能显示全部数据

SQL中只要用到聚合函数就一定要用到group by 吗?

mysql group by 能用到索引么