我研究了许多类似的主题,但是在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;
答案 0 :(得分:1)
您可以尝试
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函数documentation