首页 > 解决方案 > 如何计算不同的行

问题描述

我研究了许多类似的主题,但这个问题在 stackoverflow 的任何地方都没有解决。我有表:

name|something
john,blabla
john,xdxdxd
john,15kusdprogrammer
eve,givebackrib
malcolm,anything
eve,welcome
eve,to
eve,internet

我想用计数的行获得不同的名称 - SQL 查询如下所示:

select distinct name,count(*) from TABLE_NAME group by name order by 2 desc;

结果如下:

eve,4
john,3
malcolm,1

我试图创建这样的 flask-sqlalchemy 查询:

TABLE_NAME.query.distinct(TABLE_NAME.name).with_entities(TABLE_NAME.name, count(TABLE_NAME.something)).all()

但我创建的唯一一个解决方案是这个:

for name in TABLE_NAME.query.distinct(TABLE_NAME.name).with_entities(TABLE_NAME.name).all():
print("{}: {}".format(name, TABLE_NAME.query.filter(TABLE_NAME.name== name[0]).count()))

但是 for 循环中的查询需要大量时间。有人可以帮我从sqlite代码创建flask-sqlalchemy查询吗:

select distinct name,count(*) from TABLE_NAME group by name order by 2 desc;

标签: pythonsqlitesqlalchemyflask-sqlalchemy

解决方案


你可以试试

TABLE_NAME.query(TABLE_NAME.name, func.count(TABLE_NAME.name).label('count')).group_by(TABLE_NAME.name).all()

并且按计数排序它应该看起来像

TABLE_NAME.query(TABLE_NAME.name, func.count(TABLE_NAME.name).label('count')).group_by(TABLE_NAME.name).order_by(desc(func.count(TABLE_NAME.name))).all()

sqlalchemy 函数文档


推荐阅读