如何获得SQL中每个幼儿园的最后三个年级的平均值?

问题描述 投票:1回答:1

我在SQL中有两个表。第一个具有幼儿园的名称及其ID。第二张表包括成绩ID,幼儿园的ID,其成绩和评分日期。我只需要为每个幼儿园获得最后三个年级的平均值。

这些是我的桌子:

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

kindergarden_grade| grade_id | grade | grade_date |幼儿园_幼儿园||>

我目前正在尝试此操作,通过此查询,我得到的是我所有所有成绩的平均值,而不是最近三年的成绩。

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

这就是我得到的,这是幼儿园及其所有年级的平均值:

Corgi 3.0000蝴蝶4.0000想象力2.0000

我在SQL中有两个表。第一个具有幼儿园的名称及其ID。第二张表由年级ID,幼儿园ID,年级和日期组成。]]

sql
1个回答
0
投票

您可以使用窗口函数获取最近的三年级:

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;
© www.soinside.com 2019 - 2024. All rights reserved.