COUNT*函数返回多个值

问题描述

我正在编写一个特定的SQL查询,该查询需要根据分组表返回特定条目的位置。

背景信息:我正在使用Java和MS Access编写高尔夫俱乐部数据管理系统。在该系统中,用户能够将其分数存储为this table中的新条目。使用此表,我设法使用所有记录的得分来提取前3名高尔夫选手的排名(我只使用前3名来保留屏幕空间)。

Select TOP 3 Username,Sum(Points) 
FROM scores 
GROUP By Username 
ORDER BY Sum(Points) desc

这将产生所需的结果。但是,如果当前用户不在前三名之内,我希望能够告诉用户当前他们在所有玩家的完整排名中所处的位置。因此,我尝试编写一个查询,该查询计算的得分低于当前用户的球员总数。这是我的查询

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完成?我无法在任何地方找到解决方

解决方法

您需要附加级别的聚合:

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

注意:您可能希望检查在有关系时逻辑是否符合您的期望。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...