假设我有以下表格:
- 表学生
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:注意
答案 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