SQLalchemyのグループ化とカウント関数


回答:


165

集計上のドキュメントはのためにと言うgroup_byのクエリ、それが使用することをお勧めしfunc.count()

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

16
そして、ここで使用してそれらのための完全なステートメントのTable.queryプロパティを代わりにsession.query()Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
ヤクブKukul

2
@jkukulこれはそれ自体で答えになるはずです-サブクエリを実行するときにこの制限を回避する方法を常に疑問に思っており、group_byとcountを使用したいと思っていました。
chris-sc 2018

1
この回答を編集すると、最初の文は無意味になります。より「良い」?
マークアメリー2018年

33

Table.queryプロパティを使用している場合:

from sqlalchemy import func
Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()

session.query()メソッドを使用している場合(ミニワークの回答に記載されているとおり):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

+エンティティのあるもの
Espoir Murhabazi

27

複数のグループとそれらの共通部分を当てにすることもできます。

self.session.query(func.count(Table.column1),Table.column1, Table.column2).group_by(Table.column1, Table.column2).all()

上記のクエリは、両方の列の値の可能なすべての組み合わせの数を返します。


質問をありがとう、それについて考えている間、私は私の関連する質問への答えを見つけました。;-)
fccoelho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.