SQLite如何关联两表对比Table1分组AVG值与Table2的Data2字段
原查询错误原因
- 子查询
SELECT AVG(Data) FROM Table1未按Name分组,计算的是整张Table1的全局平均值,不是每个Name对应的分组平均值 - 子查询
SELECT Name FROM Table1会返回多条记录,直接放在SELECT字段中会触发语法错误 - 未建立Table1和Table2的关联逻辑,无法匹配两个表的对应记录
- 存在语法问题:
Table2.*后多了多余的逗号,且Table2不存在Name字段,只有Name2字段,GROUP BY的字段不存在
正确查询语句
优先用先分组后关联的写法,性能更优:
SELECT t1.Name, t1.AVGData, t2.Name2, t2.Data2 FROM ( -- 先对Table1按Name分组计算平均值 SELECT Name, AVG(Data) AS AVGData FROM Table1 GROUP BY Name ) t1 -- 和Table2按名称关联 INNER JOIN Table2 t2 ON t1.Name = t2.Name2;
如果需要保留Table2中没有匹配到Table1的记录,把INNER JOIN改成LEFT JOIN即可,无匹配的位置会自动填充NULL值。
内容的提问来源于stack exchange,提问作者bOOm_shacalaca
相关产品推荐
相关产品推荐

