SQLite3-在引入新变量时查找平均值

SQLite3-在引入新变量时查找平均值,sql,database,sqlite,Sql,Database,Sqlite,我正在使用SQLite3,我有4个表: HAVING foreignstudent = 'TRUE' ORDER BY max(score) desc; 这似乎是补充说,在将允许打印值只有在外国学生是真实的。但是,它不起作用…让我们先看看您的第一个查询: SELECT sid, name, crsid, avg(grade) FROM classmate natural join took natural join classSection natural join class GROUP B

我正在使用SQLite3,我有4个表:

HAVING foreignstudent = 'TRUE'
ORDER BY max(score) desc;

这似乎是补充说,在将允许打印值只有在外国学生是真实的。但是,它不起作用…

让我们先看看您的第一个查询:

SELECT sid, name, crsid, avg(grade)
FROM classmate natural join took natural join classSection
natural join class
GROUP BY crsid
ORDER BY max(score) desc;
除了提到问题中未定义的表外,此查询还有三个问题/坏习惯。首先,您没有使用表别名来指定列的来源。第二个是列在
select
子句中,但不在
groupby
中。第三个是使用
自然连接
<代码>自然联接似乎非常有用,但它的作用取决于表的底层结构——添加、删除或重命名列会影响联接,而不是导致错误,而是产生不同的结果。讨厌!因此,请尝试将此查询编写为:

SELECT cm.sid, cm.name, c.crsid, avg(t.grade)
FROM classmate cm join
     took t
     using (sid) join
     classSection cs
     using (secid) join
     course c
     using (crsid)
GROUP BY cm.sid, cm.name, c.crsid;
接下来,如果您只想筛选外国学生,请添加
where
子句,而不是
having
子句:

SELECT cm.sid, cm.name, c.crsid, avg(grade)
FROM classmate cm join
     took t
     using (sid) join
     classSection cs
     using (secid) join
     course c
     using (crsid)
WHERE cm.foreignstudent = 1
GROUP BY cm.sid, cm.name, c.crsid;
在SQLite中,“true”是值
1