Как объединить таблицу и подсчитать количество указанных столбцов в sqlalchemy?

#python #postgresql #sqlalchemy

#python #postgresql #sqlalchemy

Вопрос:

теперь я пытаюсь получить количество определенного столбца в таблице объединения, которая использует sqlalchemy с postgresql, и это моя таблица, к которой я присоединился.

введите описание изображения здесь

Столбец, который я хочу посчитать, это Nodes.status который имеет три значения, состоящих из 1, 2 и 3.
И я хочу знать, сколько из каждого статуса каждого клиента похоже на приведенный ниже пример.

 [customer_name, number_of_status_1, number_of_status_2, number_of_status_3]
  

Итак, как я могу это сделать, и вот как я присоединяюсь к таблице.

 db.session.query(Customers, Sites, Nodes).all()
  

Ответ №1:

Попробуйте это:

 from sqlalchemy import func

...

sites = db.session.query(Sites.customer_id.label('site_customer_id'),
func.count(Nodes.id).filter(Nodes.status == 1).label('number_of_status_1'),
func.count(Nodes.id).filter(Nodes.status == 2).label('number_of_status_2'),
func.count(Nodes.id).filter(Nodes.status == 3).label('number_of_status_3')
 ).outerjoin(Nodes).group_by(Sites.id).subquery()


query = db.session.query(Customers.name,
func.sum(sites.c.number_of_status_1),
func.sum(sites.c.number_of_status_2),
func.sum(sites.c.number_of_status_2)
).join(sites, sites.c.site_customer_id == Customers.id).group_by(Customers.id)

for row in query.all():
    print(row)