PostgreSQL的SQLAlchemy运算符聚合(每个)

时间:2015-06-10 12:23:58

标签: postgresql sqlalchemy

PostreSQL包含every() aggregate functions,它通过在所有组行上运行谓词来过滤组。

例如,对于下表:

 star_name | star_type | landed_upon
-----------+-----------+-------------
 Mars      | Planet    | t
 Venus     | Planet    | t
 Rhea      | Moons     | f
 Titan     | Moons     | t

every()查询:

SELECT star_type, max(star_name) example, COUNT(*)
    FROM stars
    GROUP BY star_type
    HAVING every (landed_upon = true);

返回Planet组,但不返回Moons组,因为Rhea不符合landed_upon组中的Moons谓词:

 star_type | example | count
-----------+---------+-------
 Planet    | Venus   |     2
(1 row)

PostgreSQL every()是否有等效的SQLAlchemy运算符?

1 个答案:

答案 0 :(得分:1)

您可以使用func对象生成SQL函数。

.having(func.every(Star.landed_upon))

将生成

HAVING EVERY(stars.landed_upon)