import asyncio from sqlalchemy import select, func, union from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import joinedload from backend.session import session_maker from models import Deal, DealProduct, Service import models import models.secondary async def main(session: AsyncSession): deal_services_subquery = ( select( models.secondary.DealService.deal_id, func.sum(models.secondary.DealService.quantity * Service.price).label('total_price') ) .join(Service) .group_by(models.secondary.DealService.deal_id) ) product_services_subquery = select( select( models.secondary.DealProductService.deal_id, func.sum(models.DealProduct.quantity * models.secondary.DealProductService.price).label('total_price') ) .join(models.secondary.DealProduct) .group_by(models.secondary.DealProductService.deal_id) .subquery() ) union_subqueries = deal_services_subquery.union(product_services_subquery).subquery() final_subquery = ( select( union_subqueries.c.deal_id, func.sum(union_subqueries.c.total_price).label('total_sum') ) .group_by(union_subqueries.c.deal_id) .subquery() ) print(final_subquery) async def preload(): async with session_maker() as session: await main(session) if __name__ == '__main__': asyncio.run(preload())