在 pyDAL 中创建 HAVING COUNT(column) > 2 子句

Creating a HAVING COUNT(column) > 2 clause in pyDAL

我有以下 pyDAL table:

market = db.define_table(
    'market',
    Field('name'),
    Field('ask', type='double'),
    Field('timestamp', type='datetime', default=datetime.now)
    )

我想用表达式语言执行下面的SQL:

SELECT * FROM market 
GROUP BY name
ORDER BY timestamp DESCENDING
HAVING COUNT(name) > 1

我知道如何做 ORDER BYGROUP BY:

db().select(
        db.market.ALL,
        orderby=~db.market.timestamp,
        groupby=db.market.name
    )

但即使在阅读 the section in the web2py book on the HAVING clause 之后我也不知道如何在 having 子句中进行计数。

count() 函数 returns 一个表达式,既可以用作 select 查询中的字段,也可以为查询的 having 参数构建参数. web2py 手册中的 Grouping and counting 部分对此主题有一些提示。

以下代码将给出所需的结果。行对象将包含 market 个对象及其各自的行数。

count = db.market.name.count()
rows = db().select(
    db.market.ALL,
    count,
    groupby=db.market.name,
    orderby=~db.market.timestamp,
    having=(count > 2)
    )