Saltar al contenido

Desviación estándar para SQLite

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *