在 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 后计算记录数的主要内容,如果未能解决你的问题,请参考以下文章