簡體   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