微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

COUNT*函数返回多个值

如何解决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;

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。