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

时间:2014-09-25 21:54:36

标签: sql database sqlite

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

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

似乎添加内容将允许仅在外国学生为真的情况下打印值。但是,它不起作用......

1 个答案:

答案 0 :(得分:1)

让我们先看看你的第一个问题:

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子句中,但不在group by中。第三是使用natural joinNatural join 似乎非常有用,但它的作用取决于表的底层结构 - 添加,删除或重命名列会影响连接,而不是通过导致错误而是通过生成不同的结果。呸!因此,请尝试将此查询编写为:

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