sqlite3 - Python 中央値を得る集計関数を追加する

sqlite には ORACLE のように中央値を取得する集計関数 MEDIAN が無いようです。しかし以下のように自前の関数を追加することができます。

import sqlite3

class Median:
    def __init__(self):
        self.values = []

    def step(self, value):
        self.values.append(value)

    def finalize(self):
        srtd = sorted(self.values)
        alen = len(srtd)
        return 0.5*(srtd[(alen-1)//2] + srtd[alen//2])

conn = sqlite3.connect("sqlite.db")
conn.create_aggregate("median", 1, Median)
cur = conn.cursor()
cur.execute("select median(data1) from table1")