如何简单地计算特定列为true的行数和false的行数?
我不能(或者我可以吗?)使用count()运行查询,因为我将此计数嵌入在having()子句中,如下所示:
.having(func.count(Question.accepted) >
func.count(not_(Question.accepted)))但是用上面的方法,函数计算不平等的两边的每一行。
我试过这样的方法
.having(func.count(func.if_(Question.accepted, 1, 0)) >
func.count(func.if_(Question.accepted, 0, 1)))但我犯了个错误
如果(布尔值、整数、整数)不存在,则为
(它似乎不存在于postgresql中)。
如何容易地计算列为true和false的行数?
发布于 2020-03-12 03:21:05
大多数类型的SQL将布尔值存储为1位整数,并在它们上正确地调用和,从而给出正布尔/真行的数量。在您的例子中,您可以简单地做:
func.sum(Question.accepted)如果SQL引擎以布尔值的形式返回布尔值之和(不确定有布尔值),则可以使用表达式函数cast()将其强制转换为整数,而不是使用func.count(case([(Question.accepted, 1)]))。
func.sum(sqlalchemy.cast(Question.accepted, sqlalchemy.Integer))最后,如果您希望将求和作为Python端的整数,则胁迫()可以完成以下任务:
sqlalchemy.type_coerce(func.sum(Question.accepted), sqlalchemy.Integer)https://stackoverflow.com/questions/37328779
复制相似问题