COUNT(*) 函数返回多个值

COUNT(*) function is returning multiple values

我正在编写一个特定的 sql 查询,它需要 return 特定条目的位置,基于分组 table。

背景信息:我正在使用 Java 和 MS Access 编写高尔夫俱乐部数据管理系统。在这个系统中,用户能够将他们的分数存储为 this table 中的新条目。使用这个 table,我成功地提取了前 3 名高尔夫球手的排名,使用他们所有记录的分数(我只使用前 3 名来保留屏幕 space)。

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 函数,但 return 为空。 COUNT DISTINCT 函数也无法正常工作,并且不断 return 出现语法错误消息,无论我怎么说。

问题:有没有办法在使用 GROUP BY 函数时计算条目数?如果不是,是否有更简单、更实用的方法来 select 分组 table 中条目的位置?或者这只能在从数据库中提取排名后在 Java 中完成?我一直无法在任何地方找到解决方案

您需要一个额外的聚合级别:

SELECT COUNT(*)
FROM (SELECT COUNT(*) 
      FROM Scores
      GROUP BY Username
      HAVING Sum(Points) < (SELECT Sum(Points)
                            FROM Scores
                            WHERE Username = 'Golfer210'
                           )
     ) as s;

注意:您可能想检查您的逻辑是否符合您的预期。