我正在编写一个特定的sql查询,该查询需要根据分组的表返回特定条目的位置。
背景资料:我正在编写一个高尔夫俱乐部的数据管理系统使用Java和MS Access。在这个系统中,用户能够将他们的分数作为新条目存储到this table中。使用这个表,我已经设法提取了前3名高尔夫球手的排名,使用了他们所有记录的分数(我只使用前3名来保留屏幕空间)。
Select TOP 3 Username, Sum(Points)
FROM Scores
GROUP By Username
ORDER BY Sum(Points) desc这会产生所需的结果。但是,如果当前用户落在前3名之外,我希望能够告诉用户他们目前在所有玩家的完整排名中所处的位置。因此,我尝试编写一个查询来计算当前用户以下积分总和的玩家数量。下面是我的问题:
Select COUNT(*)
From Scores
GROUP BY Username
HAVING Sum(Points) < (Select Sum(Points)
FROM Scores
WHERE Username = 'Golfer210'
GROUP By Username)这不会产生预期的数字2,而是生成does this.
我尝试删除GROUP BY函数,但返回null。COUNT DISTINCT函数也不起作用,无论我如何表达它,它都会不断返回语法错误消息。
问:在使用GROUP BY函数时,有没有办法计算条目的数量?如果没有,有没有更简单、更实用的方法从分组表中选择条目的位置?或者,只有在从数据库中提取排名之后,才能在Java中完成此操作?我在任何地方都找不到解决方案。
发布于 2020-08-17 20:43:59
您需要一个额外的聚合级别:
SELECT COUNT(*)
FROM (SELECT COUNT(*)
FROM Scores
GROUP BY Username
HAVING Sum(Points) < (SELECT Sum(Points)
FROM Scores
WHERE Username = 'Golfer210'
)
) as s;注意:当存在关联时,您可能想要检查您的逻辑是否如您所期望的那样。
https://stackoverflow.com/questions/63451014
复制相似问题