mysqlite中的嵌套select
我正在使用来自的示例学习sqlite,我遇到了关于嵌套选择的示例3,但我不太理解代码:mysqlite中的嵌套select,sqlite,r,Sqlite,R,我正在使用来自的示例学习sqlite,我遇到了关于嵌套选择的示例3,但我不太理解代码: sqldf("select iris.Species '[Species]', avg(Sepal_Length) '[Avg of SLs > avg SL]' from iris, (select Species, avg(Sepal_Length) SLavg from iris group by Species) S
sqldf("select iris.Species '[Species]',
avg(Sepal_Length) '[Avg of SLs > avg SL]'
from iris,
(select Species, avg(Sepal_Length) SLavg
from iris group by Species) SLavg
where iris.Species = SLavg.Species
and Sepal_Length > SLavg
group by iris.Species")
我认为上面的代码试图:
- 使用
中的数据创建一个包含iris
和[物种]
的表格(第1-3行)[SLs平均值>平均值SL]
- 创建一个名为
的表格,其中包含SLavg
中每个物种的种类和平均萼片长度(第4-6行)iris
我想知道为什么第4-5行中出现了两次
SLavg
,我尝试删除SLavg
,sqldf给了我语句:没有这样的列:SLavg
和语句:没有这样的列:SLavg.Species
代码从两个表的交叉连接中查询两列:
select c1,c2 from iris,T2 where .... group by ....
其中T2是一个子查询,用缩写“SLavg”表示:
select d1, d2 from iris group by ...... // subquery
SLavg同时用于子查询名和列名,这令人困惑。让我们给他们起不同的名字:
select
iris.Species '[Species]', avg(Sepal_Length) '[Avg of SLs > avg SL]'
from
iris,
(select Species, avg(Sepal_Length) AVGcol from iris group by Species) AVGtbl
where
iris.Species = AVGtbl.Species and Sepal_Length > AVGcol
group by
iris.Species
现在应该更容易理解了:
- 子查询
生成两列(AVGtbl
,Species
)AVGcol
和iris
的交叉连接产生四列(AVGtbl
,iris.Species
,iris.Sepal\u Length
,AVGtbl.Species
)李>AVGtbl.AVGcol
select
的where
子句对这四个变量进行操作