【问题标题】:COUNT(*) function is returning multiple valuesCOUNT(*) 函数返回多个值
【发布时间】:2020-12-06 14:22:59
【问题描述】:

我正在编写一个特定的 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 来完成?我无法在任何地方找到解决方案

【问题讨论】:

    标签: sql ms-access group-by count ranking


    【解决方案1】:

    您需要额外的聚合级别:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-17
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多