繁体   English   中英

SQLAlchemy核心-在联合查询中使用func.sum

[英]Sqlalchemy core - Using func.sum across a union query

我正在尝试找出如何对union_all select的结果求和。 我可以对单个选择使用sum函数,但不能对它们进行并集。

union_all(
    select([first.c.amount]).
        where(first.c.player_id == player_id).

    select([second.c.amount]).
        where(second.c.player_id == player_id).

    select([third.c.amount]).
        where(third.c.player_id == player_id).

    select([fourth.c.amount]).
        where(fourth.c.player_id == player_id).
)

将(别名)联合视为一个可选项,只需选择金额之和:

In [15]: u = union_all(
    ...:     select([first.c.amount]).
    ...:         where(first.c.player_id == player_id),
    ...: 
    ...:     select([second.c.amount]).
    ...:         where(second.c.player_id == player_id),
    ...: 
    ...:     select([third.c.amount]).
    ...:         where(third.c.player_id == player_id),
    ...: 
    ...:     select([fourth.c.amount]).
    ...:         where(fourth.c.player_id == player_id)
    ...: ).alias()

In [16]: stmt = func.sum(u.c.amount).select()

In [17]: print(stmt)
SELECT sum(anon_1.amount) AS sum_1 
FROM (SELECT first.amount AS amount 
FROM first 
WHERE first.player_id = :player_id_1 UNION ALL SELECT second.amount AS amount 
FROM second 
WHERE second.player_id = :player_id_2 UNION ALL SELECT third.amount AS amount 
FROM third 
WHERE third.player_id = :player_id_3 UNION ALL SELECT fourth.amount AS amount 
FROM fourth 
WHERE fourth.player_id = :player_id_4) AS anon_1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM