SQLite名称和使用临时表达式

时间:2019-02-04 16:49:57

标签: sql sqlite

我正在尝试从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 AS” ...如果您知道的话,请提出更好的搜索条件。无论如何,该表达式如何解析?我不喜欢在选择语句之间加上逗号

SELECT ..., SELECT ...;

为了使表达式有意义,必须在执行第一个select语句之前定义sub.a。这是否意味着Sqlite从右到左解析这些语句?还是从左到右解析然后意识到需要先评估第二个?我也对为什么sub不能显示为打印纸感到困惑。是

的结果
SELECT ..., SELECT ...;

只有第一个选择语句的结果吗?

1 个答案:

答案 0 :(得分: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子句中为表/子查询提供名称。