我正在尝试对access中的聚合字段进行排名,但由于基于引用的错误,我的努力是徒劳的。我使用子查询进行排名,但问题是由于对字段执行平均值而导致的别名。代码如下:
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关键字..”。从上面的代码中,我认为你已经理解了我想要实现的目标。
发布于 2015-02-16 01:46:00
从建议用来计算每个StudentID的平均生物学的基本GROUP BY查询Gordon Linoff开始。
SELECT
e.StudentID,
Avg(e.Biology) AS AvgBiology
FROM Exams AS e
GROUP BY e.StudentID将该查询另存为qryAvgBiology,然后在另一个计算排名的查询中使用它。
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返回此结果集...
StudentID AvgBiology
--------- ----------
1 70
2 80
3 90排名查询会将其转换为...
StudentID AvgBiology Rank
--------- ---------- ----
3 90 1
2 80 2
1 70 3发布于 2015-02-15 22:35:05
我假设你的基本问题是:
SELECT e.StudentId Avg(e.Biology) AS AvgBiology
FROM exams as e
GROUP BY e.StudentId;(方括号根本不能帮助我理解查询。)
我认为以下内容将在Access中发挥作用:
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;https://stackoverflow.com/questions/28527075
复制相似问题