首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对Access查询中的聚合字段进行排名

对Access查询中的聚合字段进行排名
EN

Stack Overflow用户
提问于 2015-02-15 22:27:41
回答 2查看 614关注 0票数 1

我正在尝试对access中的聚合字段进行排名,但由于基于引用的错误,我的努力是徒劳的。我使用子查询进行排名,但问题是由于对字段执行平均值而导致的别名。代码如下:

代码语言:javascript
运行
复制
SELECT [Exams].[StudentID],
       Avg([Exams].[Biology]) AS [AvgBiology],
       (SELECT Avg(T.Biology) AS [TAvgBiology],
               Count(*)
        FROM   [Exams] AS T
        WHERE  T.[TAvgBiology] > [AvgBiology])
       + 1                    AS Rank
FROM   [Exams]
GROUP  BY [Exams].[StudentID]
ORDER  BY Avg([Exams].[Biology]) DESC; 

关于状态的错误:“您选择了一个可以返回多个值的子查询,blah使用blah...please关键字..”。从上面的代码中,我认为你已经理解了我想要实现的目标。

EN

回答 2

Stack Overflow用户

发布于 2015-02-16 01:46:00

从建议用来计算每个StudentID的平均生物学的基本GROUP BY查询Gordon Linoff开始。

代码语言:javascript
运行
复制
SELECT
    e.StudentID,
    Avg(e.Biology) AS AvgBiology
FROM Exams AS e
GROUP BY e.StudentID

将该查询另存为qryAvgBiology,然后在另一个计算排名的查询中使用它。

代码语言:javascript
运行
复制
SELECT
    q.StudentID,
    q.AvgBiology, 
    (
        (
            SELECT Count(*)
            FROM qryAvgBiology AS q2
            WHERE q2.AvgBiology > q.AvgBiology
        )
        +1
    ) AS Rank
FROM qryAvgBiology AS q
ORDER BY 3;

例如,如果qryAvgBiology返回此结果集...

代码语言:javascript
运行
复制
StudentID AvgBiology
--------- ----------
        1         70
        2         80
        3         90

排名查询会将其转换为...

代码语言:javascript
运行
复制
StudentID AvgBiology Rank
--------- ---------- ----
        3         90    1
        2         80    2
        1         70    3
票数 1
EN

Stack Overflow用户

发布于 2015-02-15 22:35:05

我假设你的基本问题是:

代码语言:javascript
运行
复制
SELECT e.StudentId Avg(e.Biology) AS AvgBiology
FROM exams as e
GROUP BY e.StudentId;

(方括号根本不能帮助我理解查询。)

我认为以下内容将在Access中发挥作用:

代码语言:javascript
运行
复制
SELECT e.StudentId Avg(e.Biology) AS AvgBiology,
       (SELECT 1 + COUNT(*)
        FROM (SELECT e.StudentId, Avg(e.Biology) AS AvgBiology
              FROM exams as e
              GROUP BY e.StudentId
             ) e2
        WHERE e2.AvgBiology > Avg(e.Biology)
       ) as ranking
FROM exams as e
GROUP BY e.StudentId;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28527075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档