计算每个学生的平均值

时间:2017-04-20 14:02:05

标签: sql sql-server

假设我有以下表格:

- 表学生

create table Student(
num int primary key identity,
firstName varchar(30) not null,
lastName varchar(30)
)

- 表格模块

create table Module(
code int primary key identity,
name varchar(30) not null,
coefficient int not null)

- 表格符号

create table Notation(
stud int references student,
Mod int references Module,
DateExam datetime default getdate(),
Note float check (Note between 0 and 20)
primary key(stud , Mod ))

我想要的是显示从最佳到最差的学生姓名,学生数和平均数。

更新

average = sum(ni * ci)/ sum(ci); c:系数。 n:注意

3 个答案:

答案 0 :(得分:2)

这将获得每个学生的每个模块的注释,以及所有模块的平均值

import Ember from 'ember';

export default Ember.Component.extend({

    currentTrack: true,

});

答案 1 :(得分:2)

不要以为你需要模块。这假设笔记是你想要平均的字段。

SELECT FirstName, LastName, Note, avg(note) over (partition by s.Num) AvgNote
FROM Student S
LEFT JOIN Notation N
 on S.Num = N.Stud
GROUP BY FirstName, LastName, S.Num
ORDER BY as AvgNote Desc

另外,在处理成绩时浮动作为数据类型是一个坏主意。浮动设计不精确,以支持较小的数据存储占用空间。当你处理科学记数法并不需要精确度时,这无关紧要,但在这种情况下,我认为十进制将是一个更好的选择。

答案 2 :(得分:0)

这是我的解决方案:

select tab.num,tab.firstName, sum(noteMultiCoef)/sum(coefficient) as average from
    (select st.num,st.firstName, coefficient, note*coefficient as noteMultiCoef
    from notation nt, student st, Module md
    where st.num= nt.stud
    and nt.code = md.mod) tab
    group by tab.num, tab.firstName
    order by average desc