首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中获得每个幼儿园的最近三个等级的平均值?

如何在SQL中获得每个幼儿园的最近三个等级的平均值?
EN

Stack Overflow用户
提问于 2020-06-06 08:36:26
回答 1查看 50关注 0票数 1

我在SQL中有两个表。第一个表格包含幼儿园的名称和ID,第二个表格包含年级ID、幼儿园ID、成绩和评分日期。我只需要得到每个幼儿园最后三个年级的平均值。

下面是我手头的表格:

幼儿园|kindergarden_id|kindergarden_name|kindergarden_address|kindergarden_user_id|

kindergarden_grade |grade_id|grade|grade_date|kindergarden_kindergarden_id|

我目前正在尝试这样做,通过这个查询,我得到了所有成绩的平均值,而不是最近的三个分数。

代码语言:javascript
复制
SELECT r.kindergarden_name, AVG(r.grade)FROM (SELECT kindergarden.kindergarden_name, kindergarden_grade.grade from kindergarden left join kindergarden_grade on kindergarden.kindergarden_id=kindergarden_grade.kindergarden_kindergarden_id order by kindergarden_grade.grade_date)as r group by r.kindergarden_name

这是我得到的,这是幼儿园和他们所有成绩的平均值:

柯基3.0000蝴蝶4.0000想象力2.0000

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-06 08:39:41

您可以使用窗口函数来获取最后三个等级:

代码语言:javascript
复制
SELECT k.kindergarden_name, AVG(r.grade)
FROM (SELECT k.kindergarden_name, kg.grade,
             ROW_NUMBER() OVER (PARTITION BY k.kindergarden_name ORDER BY kg.grade_date) as seqnum
      FROM kindergarden k LEFT JOIN
           kindergarden_grade kg
           ON k.kindergarden_id = kg.kindergarden_kindergarden_id 
    ) k
WHERE seqnum <= 3
GROUP BY k.kindergarden_name;

编辑:

旧版本的MySQL不支持ROW_NUMBER()。有多种解决方案,但只有一种:

代码语言:javascript
复制
SELECT k.kindergarden_name, AVG(r.grade)
FROM kindergarden k LEFT JOIN
     kindergarden_grade kg
     ON k.kindergarden_id = kg.kindergarden_kindergarden_id 
WHERE kg.grade_date >= ANY (SELECT kg2.grade_date
                            FROM kindergarden_grade kg2
                            WHERE kg2.kindergarden_kindergarden_id = kg.kindergarden_kindergarden_id
                            ORDER BY kg2.grade_date DESC
                            LIMIT 1 OFFSET 2
                           )
 GROUP BY k.kindergarden_name;

这使用子查询返回第三个最新日期。ANY处理特定幼儿园没有三个日期的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62225951

复制
相关文章

相似问题

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