在 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 BY
和 GROUP 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)
)
我有以下 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 BY
和 GROUP 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)
)