【发布时间】:2018-12-02 20:35:11
【问题描述】:
在使用AVG() 计算学生的平均分时,我注意到我的结果与每行输入的结果相同。
例如:
在上图中,Jeff 的第 2 学期和第 3 学期有 83 和 85,但他的 avg_mark 不是显示 83.5 的单行
我的查询如下:
Select m.stdName, m.markPercent, m.crsName, m.term, AVG(distinct markPercent) as avg_mark
from Marks as m
inner join StudentSchedule as ss on ss.crsName = m.crsName and ss.stdName = m.stdName
Inner JOIn Course as c on c.crsName = m.crsName
where m.stdName like 'Jeff'
group by m.stdName, m.markPercent, m.crsName, m.term;
我的架构中的一些表:
create table Course (
crsID INTEGER PRIMARY KEY AUTOINCREMENT,
crsName VARCHAR(8) NOT NULL,
crsTerm INT NOT NULL
);
CREATE TABLE StudentSchedule(
stdSchedule INTEGER PRIMARY KEY AUTOINCREMENT,
stdName INT NOT NULL,
teacherName INT not NULL,
crsName INT not NULL,
startTime NUMERIC NOT NULL,
endTime NUMERIC NOT NULL,
term INT NOT NULL,
FOREIGN KEY(stdName) references Student(stdID),
FOREIGN KEY(teacherName) REFERENCES Teacher(teacherID),
FOREIGN KEY(crsName) REFERENCES Course(crsID)
);
CREATE TABLE Marks (
markID INTEGER PRIMARY KEY AUTOINCREMENT,
markPercent REAL NOT NULL,
stdName INT NOT NULL,
crsName INT not NULL,
term INT NOT NULL,
FOREIGN KEY(stdName) references Student(stdID),
FOREIGN KEY(crsName) REFERENCES Course(crsID),
FOREIGN KEY(term) references StudentSchedule(term)
);
insert into Course (crsName, crsTerm) values ('COMP4900', 2);
insert into StudentSchedule(stdName, teacherName, crsName, startTime, endTime, term) values ('Jeff','tej','COMP4900',1000,1200,2);
insert into StudentSchedule(stdName, teacherName, crsName, startTime, endTime, term) values ('Jeff','farnaz','COMP4900',1200,200,3);
insert into Marks (markPercent, stdName, crsName, term) values (83.0, 'Jeff','COMP4900', 2);
insert into Marks (markPercent, stdName, crsName, term) values (87.0, 'Jeff','COMP4900', 3);
谁能指出我的查询中的缺陷?
【问题讨论】:
标签: sql sqlite average aggregate-functions