#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)