SQLite3-在引入新变量时查找平均值
我正在使用SQLite3,我有4个表: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
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