Я хочу внести небольшие изменения в sql.func.std. Я хочу вернуть другое значение, когда стандартный результат равен nan
, используя этот код:
from sqlalchemy.sql.expression import FunctionElement
class std(FunctionElement):
name = 'std'
@compiles(std)
def compile(element, compiler, **kw):
elem = compiler.process(element.clauses)
return "if(isnan(std(%s)), 0, std(%s))" % (elem, elem)
t1 = sql.select([sql.literal("1").label('a')]).alias('t1')
q = sql.select([std(t1.c.a)]).select_from(t1)
результат равеножидается
SELECT if(isnan(std(t1.a)), 0, std(t1.a)) FROM (SELECT '1' AS a) AS t1
при использовании этого запроса
q = sql.select([sql.func.std(t1.c.a)]).select_from(t1)
результат неправильный
SELECT std(t1.a) AS std_1 FROM (SELECT '1' AS a) AS t1