我搜索过SQLite文档并找不到任何内容,但我也在谷歌上搜索了一些结果.
SQLite是否有任何内置的标准偏差功能?
您可以计算SQL中的方差:
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支持的聚合函数在这里:
http://www.sqlite.org/lang_aggfunc.html
STDEV不在列表中.
然而,该模块extension-functions.c
在该页面包含一个STDEV功能.
sqlite中仍然没有内置的stdev函数.但是,您可以定义(如Alix已完成的)用户定义的聚合器函数.这是Python中的完整示例:
import sqlite3 import math class StdevFunc: def __init__(self): self.M = 0.0 self.S = 0.0 self.k = 1 def step(self, value): if value is None: return tM = self.M self.M += (value - tM) / self.k self.S += (value - tM) * (value - self.M) self.k += 1 def finalize(self): if self.k < 3: return None return math.sqrt(self.S / (self.k-2)) with sqlite3.connect(':memory:') as con: con.create_aggregate("stdev", 1, StdevFunc) cur = con.cursor() cur.execute("create table test(i)") cur.executemany("insert into test(i) values (?)", [(1,), (2,), (3,), (4,), (5,)]) cur.execute("insert into test(i) values (null)") cur.execute("select avg(i) from test") print("avg: %f" % cur.fetchone()[0]) cur.execute("select stdev(i) from test") print("stdev: %f" % cur.fetchone()[0])
这将打印:
avg: 3.000000 stdev: 1.581139
与MySQL比较:http://sqlfiddle.com/#!2/ad42f3/3/0