SQLite的名称,并使用临时表达

问题描述 投票:1回答:1

我想了解此代码:Standard Deviation for SQLite

create table t (row int);
insert into t values (1),(2),(3);
SELECT AVG((t.row - sub.a) * (t.row - sub.a)) as var from t, 
    (SELECT AVG(row) AS a FROM t) AS sub;
0.666666666666667

它计算给定值的变化(我知道它不计算无偏估计,这是不是问题)。

我有一个艰难的时间在搜索引擎上搜索“SQLite作为”如你所想......请提出更好的搜索词,如果你知道任何。在任何情况下,这是怎么表达分析?我不熟悉,把select语句等之间的逗号

SELECT ..., SELECT ...;

为了使表达变得有意义,可以执行第一个SELECT语句之前sub.a必须定义。这是否意味着SQLite是解析这些语句从右到左?或者它解析由左到右,然后认识到,第二个需要先评估?我也搞不清楚为什么没有出现印刷sub。是的结果

SELECT ..., SELECT ...;

只有第一个SELECT语句的结果?

sql sqlite
1个回答
1
投票

它是否有助于看到这样写的代码?

SELECT AVG((t.row - sub.a) * (t.row - sub.a)) as var
FROM t CROSS JOIN
     (SELECT AVG(row) AS a FROM t) sub;

,CROSS JOIN,是 - 通过SQL标准 - 古老的语法。显式JOIN已经存在了几十年,强烈推荐。

AS用于定义别名,但是是可选的。我用它仅列别名 - 也就是说,给人一种表达在SELECT的名称。它也使用了FROM子句中给表/子查询的名称。

© www.soinside.com 2019 - 2024. All rights reserved.