select
      avg_s.jobs,
      round(avg_s.avg,3)
from
    (select
           distinct(job) jobs,
           avg(score) over(partition by job) avg
     from grade
    order by avg desc) as avg_s

首先,是关于窗口函数,

框架是:函数()over (),前面函数是计算方式,后面over是聚合方式,所以。函数可以自己换的,这里是要求平均数,所以我就换成avg(score),后面是根据科目聚合,所以我用over(partition by job),计算每个科目的平均分就是avg(score) over(partition by job) avg

,然后发现用job是把8个科目都取出来了,没有去重,所以对job用distinct去重复,最终再按照avg排降序,但是如何对数字精确到需要的位置数?用round函数

SELECT ROUND(your_column, 3) FROM your_table;
#表示将某一列,设置到小数点后3位