2

我有以下 pyDAL 表:

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
    )

但是即使在阅读了 web2py 书中关于该HAVING子句的部分之后,我也不知道如何在有子句中进行计数。

4

1 回答 1

2

count()函数返回一个表达式,该表达式既可以用作select查询中的字段,也可以构建查询参数的having参数。web2py 手册中的分组和计数部分对此主题有一些提示。

以下代码将给出所需的结果。行对象将同时保存market对象及其各自的行数。

count = db.market.name.count()
rows = db().select(
    db.market.ALL,
    count,
    groupby=db.market.name,
    orderby=~db.market.timestamp,
    having=(count > 2)
    )
于 2016-11-23T15:33:53.487 回答