Ya no tienes que investigar más en otros sitios porque llegaste al espacio necesario, poseemos la respuesta que necesitas encontrar pero sin problema.
Solución:
Puedes calcular la varianza en 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
Sin embargo, aún debe calcular la raíz cuadrada para obtener la desviación estándar.
Las funciones agregadas admitidas por SQLite están aquí:
http://www.sqlite.org/lang_aggfunc.html
STDEV no está en la lista.
Sin embargo, el módulo extension-functions.c
en esta página contiene una función DESVEST.
Todavía no hay una función stdev incorporada en sqlite. Sin embargo, puede definir (como lo ha hecho Alix) una función de agregador definida por el usuario. Aquí hay un ejemplo completo en 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])
Esto imprimirá:
avg: 3.000000
stdev: 1.581139
Comparar con MySQL: http://sqlfiddle.com/#!2/ad42f3/3/0
Eres capaz de añadir valor a nuestro contenido asistiendo con tu veteranía en las ilustraciones.