我在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,年级和日期组成。]]
您可以使用窗口函数获取最近的三年级:
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;