我正在尝试从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 ...;
只有第一个选择语句的结果吗?
答案 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
子句中为表/子查询提供名称。