Python SQLAlchemy:group_by()多个列,使用sum()

2024-10-08 21:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力创造一个相当于

select count(urlpair.id), urlpairlabel.label, sum(tag.relevant)
from urlpair
left join tag
    on urlpair.id = tag.urlpair_id
join urlpairlabel
    on urlpair.id = urlpairlabel.urlpair_id
group by urlpairlabel.label, urlpair.url_1;

但是,与原始SQL相比,我尝试过的一些组合似乎太慢了

^{pr2}$

和我的邮递员去API

def get_pair_stats():
stats = db.session \
    .query(
        func.count(Urlpair.id),
        Urlpairlabel.label,
        func.sum(
            case([(Tag.relevant == true(), 1)], else_=0))) \
    .outerjoin(Tag) \
    .join(Urlpairlabel) \
    .group_by(Urlpairlabel.label, Urlpair.url_1) \
    .all()

stats = [{
    'count': count,
    'label': label,
    'positives': int(positives)
} for (count, label, positives) in stats]

return stats

结果:

Status: 200 OK Time: 6226 ms Size: 3.7 MB

我注意到当我没有同时提供group_by的两个参数时,它似乎是2s而不是6-8。有没有更好的方法来创建这个声明?在


Tags: idbyontagstatscountgrouplabel

热门问题