Hello.
Perhaps something like this is what you are looking for?
def q_union():
s = session
q1 = s.query(
Movement.customer_id.label('customer_id'),
Movement.document_id.label('document_id'),
Movement.debt.label('debt_moved'),
literal(0.00).label('debt_total')
)
q2 = s.query(
Debt.customer_id.label('customer_id'),
Debt.document_id.label('document_id'),
literal(0.00).label('debt_moved'),
Debt.debt.label('debt_total'),
)
q3 = q1.union(q2).subquery()
q4 = session.query(
q3.c.customer_id,
q3.c.document_id,
func.sum(q3.c.debt_moved),
func.sum(q3.c.debt_total),
).group_by(q3.c.customer_id, q3.c.document_id)
return q4
Call to `print q_union()` prints the following:
SELECT
anon_1.customer_id AS anon_1_customer_id,
anon_1.document_id AS anon_1_document_id,
sum(anon_1.debt_moved) AS sum_1,
sum(anon_1.debt_total) AS sum_2
FROM (
SELECT
anon_2.customer_id AS customer_id,
anon_2.document_id AS document_id,
anon_2.debt_moved AS debt_moved,
anon_2.debt_total AS debt_total
FROM (
SELECT
movement.customer_id AS customer_id,
movement.document_id AS document_id,
movement.debt AS debt_moved,
%(param_1)s AS debt_total
FROM movement
UNION
SELECT
debt.customer_id AS customer_id,
debt.document_id AS document_id,
%(param_2)s AS debt_moved,
debt.debt AS debt_total
FROM debt
) AS anon_2
) AS anon_1
GROUP BY anon_1.customer_id, anon_1.document_id
I have attached a complete python script that you can run to verify if it's
correct.
HTH,
Ladislav Lenart
On 21.3.2013 09:07, Alexey Vihorev wrote:
> Hi!
>
>
>
> I have this query:
>
>
>
> q1 =(s.query()
>
> .add_columns(
>
> Movement.customer_id,
>
> Movement.document_id,
>
> func.sum(Movement.debt).label('debt_moved'),
>
> literal(0.00).label('debt_total')
>
> )
>
> .group_by(Movement.customer_id, Movement.document_id)
>
> )
>
>
>
> q2 =(s.query().
>
> add_columns(
>
> Debt.customer_id,
>
> Debt.document_id,
>
> literal(0.00).label('debt_moved'),
>
> Debt.debt.label('debt_total'),
>
> )
>
> )
>
>
>
> q3 =q1.union(q2)
>
>
>
> The problem is that I need to SUM() the resulting query (columns 'debt_moved',
> 'debt_moved' should be summed, grouped by customer_id, document_id), but so
> far all my attempts to use add_columns() and group_by() on q3 have failed. How
> should I handle this this?
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email
> to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.