繁体   English   中英

如何获得SQL查询的前N行的平均值?

[英]How can I get the average of the top N rows of a SQL query?

我正在努力

SELECT AVG(q."level")
FROM "Questions" q, "QuestionScores" qs
WHERE qs."QuestionId" = q."id"
AND qs."StudentId"=13
AND q."TopicId" = 45
AND qs."version" = 8
ORDER BY qs."score" DESC
LIMIT 3 

但是它说我需要在GROUP BY中使用qs."score"或者在聚合函数中使用。 我想要的是平均排名前三的问题级别(按分数排名)。

您需要使用子查询获取前n行, 然后获得平均值:

SELECT AVG(level) FROM (
    SELECT q.level
    FROM Questions q, QuestionScores qs
    WHERE qs.QuestionId = q.id
    AND qs.StudentId=13
    AND q.TopicId = 45
    AND qs.version = 8
    ORDER BY qs.score DESC
    LIMIT 3
) x

我建议你使用现代(超过25年)的join语法:

   SELECT AVG(level) FROM (
    SELECT q.level
    FROM Questions q
    JOIN QuestionScores qs ON qs.QuestionId = q.id
    WHERE qs.StudentId=13
    AND q.TopicId = 45
    AND qs.version = 8
    ORDER BY qs.score DESC
    LIMIT 3
) x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM