2016-11-13 30 views
2
2子句

我有以下pyDAL表:创建HAVING COUNT(列)>在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 
    ) 

,但我不知道该怎么做即使在阅读the section in the web2py book on the HAVING clause之后,也可以在一个条款中计数。

回答

2

count()函数返回一个表达式,该表达式既可以用作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) 
    )